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 :
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()
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
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;

}
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
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
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
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
// fichier main.cpp

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
  // l'excution n'atteint pas cette ligne.

 return true;
}
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 ?



Merci par avance,


Rémi Arquier
Développement Unfold3D
http://www.unfold3d.com