OVH Cloud OVH Cloud

Récup fichier .X dans un fichier ressources(.res) en vb6

3 réponses
Avatar
tfl
Bonjour =E0 tous,
je travaille sur un programe qui m'affiche un objet 3d=20
sous directx 8.
Cet objet 3d est ind=E9pendant du programe, et est stock=E9=20
dans un fichier au format directx (.X).
Le programe le charge avec l'intruction suivante :

Set Mesh =3D D3DX.LoadMeshFromX(App.Path & "\Fichier.x",=20
D3DXMESH_MANAGED, D3DDevice, Nothing, mtrlBuffer,=20
nMaterials)

Cela marche tr=E8s bien, mais je voudrais inclure ce fichier=20
dans mon ex=E9cutable.
J'ai donc cr=E9e un fichier ressouces (.res) avec le=20
fichier "Fichier.x), mais =E9tant d=E9butant en programation=20
sous directx je ne sais pas comment le r=E9cup=E9rer dans mon=20
programe.

Quelqu'un peut il m'aider ?

Amicalement, TFL.

3 réponses

Avatar
ng
Salut,

Tu pourrais utiliser ce code :

'permet d'extraire une ressource
Public Sub SaveResBinaryFile(id As Integer, sFichier As String)
Dim k As Integer, tblOctets() As Byte
'récupère un tableau d'octet contenant la ressource
tblOctets = LoadResData(id, 2)
'enregistre la ressource
k = FreeFile
Open sFichier For Binary As #k
Put #k, , tblOctets
Close #k
Erase tblOctets
End Sub


Tu peux par exemple stocker le fichier temporairement dans le rep temp et le
détruire en quittant :

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA"
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long


Public Function ObtTemp() As String
'repertoire temp
Dim strTemp As String
strTemp = String(100, Chr$(0))
GetTempPath 100, strTemp
strTemp = Left$(strTemp, InStr(strTemp, Chr$(0)) - 1)
If Right$(strTemp, 1) <> "" Then strTemp = strTemp & ""
ObtTemp = strTemp
End Function

Ou même l'extraire dans le rep de l'appli :

Public Function AppPath()
'répertoire de l'appli
If Right$(App.Path, 1) = "" Then AppPath = App.Path Else AppPath = App.Path
& ""
End Function


Ton code serait alors :

Call SaveResBinaryFile(101,AppChe & "Fichier.x")

Set Mesh = D3DX.LoadMeshFromX(App.Path & "Fichier.x", D3DXMESH_MANAGED,
D3DDevice, Nothing, mtrlBuffer, nMaterials)

Puis en quittant :

Call Kill (AppChe & "Fichier.x")
--
Nicolas.
http://www.ngsoft-fr.com
"tfl" a écrit dans le message de news:
073b01c3dea5$b3b06d80$
Bonjour à tous,
je travaille sur un programe qui m'affiche un objet 3d
sous directx 8.
Cet objet 3d est indépendant du programe, et est stocké
dans un fichier au format directx (.X).
Le programe le charge avec l'intruction suivante :

Set Mesh = D3DX.LoadMeshFromX(App.Path & "Fichier.x",
D3DXMESH_MANAGED, D3DDevice, Nothing, mtrlBuffer,
nMaterials)

Cela marche très bien, mais je voudrais inclure ce fichier
dans mon exécutable.
J'ai donc crée un fichier ressouces (.res) avec le
fichier "Fichier.x), mais étant débutant en programation
sous directx je ne sais pas comment le récupérer dans mon
programe.

Quelqu'un peut il m'aider ?

Amicalement, TFL.
Avatar
Merci Nicolas,
cela va certainement m'aider, mais j'aimerais trouver un
moyen de récupérer les données de la ressource sans passer
par l'écriture d'un fichier, et donc utiliser un autre
moyen que l'instruction :

Set Mesh = D3DX.LoadMeshFromX(App.Path & "Fichier.x",
D3DXMESH_MANAGED,
D3DDevice, Nothing, mtrlBuffer, nMaterials)

pour créer l'objet, mais je n'arrive pas à trouver
d'instruction directx correspondant à cela.
Si tu a des connaisances la dessus, je suis preneur.
Merci encore.

TFL
Avatar
ng
Salut,

Non je ne connais pas directx, il faudrait une fonction acceptant un tableau
d'octets en paramètre et non un nom de fichier.

--
Nicolas.
http://www.ngsoft-fr.com
a écrit dans le message de news:
01ca01c3debc$fdc749e0$
Merci Nicolas,
cela va certainement m'aider, mais j'aimerais trouver un
moyen de récupérer les données de la ressource sans passer
par l'écriture d'un fichier, et donc utiliser un autre
moyen que l'instruction :

Set Mesh = D3DX.LoadMeshFromX(App.Path & "Fichier.x",
D3DXMESH_MANAGED,
D3DDevice, Nothing, mtrlBuffer, nMaterials)

pour créer l'objet, mais je n'arrive pas à trouver
d'instruction directx correspondant à cela.
Si tu a des connaisances la dessus, je suis preneur.
Merci encore.

TFL