Generer un manifest pour utiliser la msvcrt.dll avec masm

Signaler
Messages postés
570
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 janvier 2021
-
Messages postés
570
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 janvier 2021
-
Bonjour,
Pour pouvoir utiliser directx 9 avec masm,j'ai lié la msvcrt.lib a mon projet.Celle ci permet d'utiliser la CRT run time,directx en a besoin pour fonctionner.L'ennui est qu'il est obligatoire d'ajouter un manifest au source , faute de quoi on obtient divers messages d'erreurs concernant la "mspdb80.dll".
Il y a vraiment peu de documentation la dessus concernant masm.
http://www.codeproject.com/cpp/vcredists_x86.asp#Shared_CRTs
Le plus souvent il s'agit du c++,  quelqu'un pourrait-il m'éclairer ?????????

6 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
DirectX n'a aucun besoin de CRT au niveau de ton prog, il est de loin préférable que ton prog ne soit pas lié directement à une msvcrtxxx.dll, de ce fait aucun besoin non plus de manifest.

Je t'ai fait un exemple minimal:
http://brunews.com/Device.zip
C'est un exemple du SDK DX que j'ai remodelé sans CRT.
Attention aux directories du sdk que j'ai mises dans mon proj, je n'ai pas installé le sdk, juste décompressé dans un dossier et je le virerai sous peu (c'est pas mon taf le DX...). Si tu veux recompiler, faudra adapter les directories d'include et lib.

ciao...
BruNews, MVP VC++
Messages postés
570
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 janvier 2021
2
Salut,
Sympa pour l'exemple en c.
Ma machine me dit "Direct3DCreate9Ex cannot be found in d3d9.dll"
La porte d'entrée sur directx reste fermée !.
J'ai le dernier SDK directx sur ma machine et le dernier Directx9_0C dans mon systeme.
Il y aurait il une version plus récente ?.Peut être la dix ?.
Dans d3d9.h,je ne trouve que Direct3DCreate9.

A part ça,la réponse est juste mais incomplète pour masm.
On a deux solutions:
****** Soit lié avec libcmt.lib,et ça le c le fait sans prévenir.
Dans ce cas avec masm il faut fournir l'entrée main.
****** deuxieme solution:
Se lié a la msvcrt.lib et la il faut un manifest, pas de e içi,le fichier doit avoir l'extension .manifest pour être reconnu comme tel par mt.exe.

M'enfin,tout ça c'est pour dire que je suis franchement @è$$*= avec le troisiéme exemple du tutorial directx(traduit fidèlement en masm) , il fait tourner un triangle (en c++).
En masm,j'en arrive au point ou :
La traduction faite a partir du fichier de désassemblage du c++,n'a aucuin bug (windbg)
Le D3DSpy.exe fournit avec le sdk me dit que tout fonctionne et est ok.
J'ai testé mon appli avec les deux types de liens.
et ................. le triangle ne tourne pas !!!!!!!!
Qui peut m'apporter ne serait-ce qu'une piste?
                     merci mour la réponse
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
D3D9.DLL j'ai version 6.0.6000.16386 fournie avec Vista.

J'ai décompressé le sdk DX de Juin 2007.
Il y en a un de aout ici:
http://www.microsoft.com/downloads/details.aspx?FamilyId=2DA43D38-DB71-4C1B-BC6A-9B6652CD92A3&displaylang=en
mais ça ne devrait pas changer grand chose.

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Je ne comprends pas "...fournir l'entrée main"

.586
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none


include \masm32\include\windows.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib

.code
   ALIGN 4
start:
   push     0
   call     GetModuleHandle
   mov      hinst, eax
  
progEnd:
   push     0
   call     ExitProcess


end start

et je compile avec un bat de ce genre:
SET fOut=%~dp0%~n0.
SET myDir=%~dp0
if exist %myDir%*.obj del %myDir%*.obj
if exist %myDir%*.exe del %myDir%*.exe
if exist %myDir%*.res del %myDir%*.res


path %~d0\Masm32\BIN7
if not exist %fOut%rc goto noResource
Rc.exe /v %fOut%rc
cvtres.exe /nologo /machine:ix86 /out:%myDir%Rsrc.obj %fOut%res
:noResource
Ml.exe /c /coff /nologo %fOut%asm
Link.exe /nologo /SUBSYSTEM:WINDOWS /out:%fOut%exe %myDir%*.obj
if not errorlevel 1 goto exitbat
:erratum
pause
:exitbat
if exist %myDir%*.obj del %myDir%*.obj
if exist %myDir%*.res del %myDir%*.res

ciao...
BruNews, MVP VC++
Messages postés
570
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 janvier 2021
2
Pour l'entrée main,il s'agit d'un message d'erreur du lieur lorsqu'on introduit la librairie libcmt.lib.
Traditionellement avec masm,on utilise
start:
end start
Pour définir la zone de code,avec libcmt.lib c'est "main:     end main",et là le lieur est content.
Je vais télécharger la mise à jour de directx et voir si ......
Messages postés
570
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 janvier 2021
2
Re,
Pour la mise a jour,elle me dit "rien a faire",je suis a jour.
Par contre , j'ai XP au lie de vista.Le problème doit venir de là.
Pour info,suit le batch que j'utilise pour compiler,il est à la mode du c++ 8 express et utilise son envirronnement; j'incorpore le .manifest en compilant la ressource.
---------------------------------------------------------------------------------
call "vcvars32.bat"
rem CMD


SET ML=/c /coff /Zp4 /Zi /Zd
SET PROG=matrices


rc /v /fo %PROG%.exe.embed.manifest.res %PROG%.rc
cvtres /MACHINE:IX86 /OUT:%PROG%.bin %PROG%.exe.embed.manifest.res
REM /DEBUG /PDB:%PROG%.pdb /Zi /Zd
ml /FR[%PROG%.sbr] %PROG%.asm
Link /SUBSYSTEM:WINDOWS /INCREMENTAL /DEBUG /PDB:%PROG%.pdb /MANIFEST /MANIFESTFILE:%PROG%.exe.intermediate.manifest  %PROG%.obj %PROG%.bin 
mt.exe /verbose /out:%PROG%.exe.embed.manifest /notify_update /manifest %PROG%.exe.intermediate.manifest
pause

--------------------------------------------------------------------------------