Bonjour,
Je suis auteur d'un logiciel pour l'industrie du jeu vidéo et du cinéma d'animation. Cela fait maintenant deux semaines que je suis passé à VC8 pour la compilation et le déployement de mon application.
Notez que cette application est basée sur la library wxWidgets. Notez aussi que les exemples de code de cette library (version 2.8.4) ont été compilés et executés avec succés aussi bien sur Vista que sur XP.
Mon problème est le suivant : Je constate depuis le changement de vc7 à vc8 une imcompatibilité visible au lancement de l'application sous vista (je n'ai aucun problème sous XP, l'application fonctionne comme avant). Je précise qu'avec vc7 , je n'avais pas de problèmes avec vista.
Le message d'erreur sous vista en mode RELEASE est le suivant : "unfold3dstudio.exe à cesser de fonctionner ... windows receuille etc...". Ensuite j'obtient un message de la Runtime Library : " L'application n'a pas réussi à s"initialiser correctement (0x80000003). "
Le message d'erreur sous vista en mode DEBUG est le suivant :
"Windows has triggered a breakpoint in unfold3dstudio.exe
this may be due to a corruption of the heap, and indicates a bug in unfold3dstudio.exe or any of the DLLs it has loaded.
The output window may have more diagnostic information"
Voici une copie de la pile d'appel :
Voici une copie d'une partie de code pointee par visual lors de la session de debogage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ntdll.dll!77722ea8() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] > msvcr80d.dll!__CRTDLL_INIT(void * hDllHandle=0x10200000, unsigned long dwReason=1, void * lpreserved=0x0116fd24) Line 355 C msvcr80d.dll!_CRTDLL_INIT(void * hDllHandle=0x10200000, unsigned long dwReason=1, void * lpreserved=0x0116fd24) Line 214 + 0x11 bytes C ntdll.dll!7774a604() ntdll.dll!7770c8f9() ntdll.dll!7770ccf7() ntdll.dll!7770e4f8() ntdll.dll!7773fea0() ntdll.dll!77707c46() ntdll.dll!7770c8cb() ntdll.dll!777700aa() ntdll.dll!77714c41() ntdll.dll!77715ad7() ntdll.dll!77716862() ntdll.dll!7771a980()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #if defined (_CRT_CHECK_MANIFEST) if (!_check_manifest(hDllHandle)) { __try { _NMSG_WRITE(_RT_CHECKMANIFEST); } __except( EXCEPTION_EXECUTE_HANDLER ) { OutputDebugString(_GET_RTERRMSG(_RT_CHECKMANIFEST)); DebugBreak(); } <===== Arret ici _ioterm(); /* shut down lowio */ _mtterm(); /* free TLS index, call _mtdeletelocks() */ _heap_term(); /* heap is now invalid! */ return FALSE; }Voici mes flags de Link (mode debug aussi) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Voici mes flags de Compil (en mode debug) : cl /nologo -c /Od /Z7 /EHsc /MDd /RTC1 /D WIN32 /D _WINDOWS /D _CRT_SE CURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_DEPRECATE /D WINDOWS /D "BUILD_MULTIUVSET" /D "BUILD_NOSECURE" -I./src -I..\DevelLib503\/ src/ /I../DevelExternal/superlu_3.0/SRC/ /I../DevelExternal/Glut/ /D "__WXMSW__ " /D "_WINDOWS" /D "NOPCH" /D "_VC80_UPGRADE=0x0600" -I../DevelExternal/wxWidge ts-2.8.4//lib/vc_lib/mswd -I../DevelExternal/wxWidgets-2.8.4//include -I../Deve lExternal/wxWidgets-2.8.4//src/regex -I../DevelExternal/wxWidgets-2.8.4//src/reg ex -I../DevelExternal/wxWidgets-2.8.4//src/png -I../DevelExternal/wxWidgets-2.8. 4//src/zlib -I../DevelExternal/wxWidgets-2.8.4//src/jpeg -I../DevelExternal/wxWi dgets-2.8.4//src/jpeg -I../DevelExternal/wxWidgets-2.8.4//src/tiff -D "BUILD_NO SECURE" -D "BUILD_SURFOPTIM" -D "BUILD_PACKING" -D "BUILD_OPTIMPACKINGTOOLS" -D "BUILD_MULTIUVSET" -D "BUILD_IMPORTUV" -D "BUILD_CUTTINGTOOLS" -D "BUILD_N OSAVINGFUNCS" -DPROGRAMNAME=\""Unfold3D Studio Edition DEMO "\" -DPROGRAMVERSION =\""5.0.3"\" src/cunfoldthread.cpp /Foobj/cunfoldthread.obj
Notez aussi que j'ai réduit le code d'initialisation de la wxWidget au minimum vital :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 link /nologo /STACK:10000000 /DEBUG /SUBSYSTEM:WINDOWS /MACHINE:X86 /I NCREMENTAL:NO OpenGL32.lib Iphlpapi.lib /NODEFAULTLIB:LIBC /NODEFAULTLIB:LIBCMT /NODEFAULTLIB:ADVAPI32.dll /NODEFAULTLIB:WSOCK32.dll glu32.lib kernel32.lib use r32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib oldnames.lib c omctl32.lib odbc32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib w sock32.lib ../DevelExternal/wxWidgets-2.8.4//lib/vc_lib/wxbase28d.lib ../DevelEx ternal/wxWidgets-2.8.4//lib/vc_lib/wxregexd.lib ../DevelExternal/wxWidgets-2.8.4 //lib/vc_lib/wxpngd.lib ../DevelExternal/wxWidgets-2.8.4//lib/vc_lib/wxzlibd.lib ../DevelExternal/wxWidgets-2.8.4//lib/vc_lib/wxjpegd.lib ../DevelExternal/wxWid gets-2.8.4//lib/vc_lib/wxtiffd.lib ../DevelExternal/wxWidgets-2.8.4//lib/vc_lib /wxmsw28d_core.lib ../DevelExternal/wxWidgets-2.8.4//lib/vc_lib/wxmsw28d_adv.lib ../DevelExternal/wxWidgets-2.8.4//lib/vc_lib/wxexpatd.lib ../DevelExternal/wxWi dgets-2.8.4//lib/vc_lib/wxmsw28d_gl.lib ../DevelExternal/wxWidgets-2.8.4//lib/v c_lib/wxmsw28d_richtext.lib netapi32.lib wsock32.lib ..\DevelLib503\/keylok/kfun c32.lib obj/cappframe.obj obj/cappwx.obj obj/cbitmap.obj obj/cglcanvas3d.obj obj /cgllisthandler.obj obj/ckeymousemap.obj obj/cmessage.obj obj/coperation.obj obj /cpackingprefwindow.obj obj/cunfold3dprefwindow.obj obj/cunfoldthread.obj obj/sh owbigtext.obj obj/trackball.obj src/unfold3d.res ..\DevelLib503\/bin/libunfold3d .lib ../DevelExternal/Glut/GLUT32.LIB /OUT:bin/unfold3dstudio.exe
Comme vous le voyez, il n'y a pas de code à remettre en question puisqu'il n'y a pas de code provenant de ma part, et je ne pense pas que le problème vienne du code d'initialisation de la library wxWidget. Il s'agit donc surrement d'un problème de chargement DLL, d'un problème de fichier manifest, ou d'un problème de flag de compil / link. Il s'agit surrement d'une chose toute bête, mais je ne vois pas. Avez-vous une idée, une méthodologie de résolution à me proposer, ou un conseil ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // fichier main.cpp IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { // l'excution n'atteint pas cette ligne. return true; }
Merci par avance,
Rémi Arquier
Développement Unfold3D
http://www.unfold3d.com
Partager