Bonjour,
je travaille sur un projet dont l'architecture est la suivante:
- un gros programme en c++ natif compilé sous forme de lib statique
- un wrapper c++/cli qui wrappe une classe et quelques fonction membre d'une classe de la lib c++
- un programme de test en c# qui utilise le wrapper c++/cli
le problème c'est que ce projet a été fait à l'aide de la technique du "doigt mouillé" (voyons vois si je modifie cette option ce que ça donne) et ce wrapper tombe en marche parfois, mais sur la plupart des plateformes, il crashe brutalement.
J'ai donc tout repris, unifié les options de compilations (plateforme, configuration, charset, framework, ...). La dll en c++ natif semble nickel car je l'ai testé à l'aide d'un exécutable en c++ natif et ça marche parfaitement.
Mais par contre je rencontre d'étranges problèmes avec le wrapper c++/cli. Le code compile, mais ça plante à l'exécution, avant d'entrer dans le main() du test en c#. Le message d'erreur est le suivant:
Un point qui m'attire l'attention c'est que le wrapper en c++/cli ne fait que 4Mo, alors que la lib en c++ natif fait de l'ordre de 100Mo. Or si c'est une lib statique, son assembly devrait être inclu dans la dll c++/cli, non?First-chance exception at 0x000007fefd92bccd in rankManagedDllTest.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0045c5f8..
First-chance exception at 0x7741ce3b in rankManagedDllTest.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff.
First-chance exception at 0x7741ce3b in rankManagedDllTest.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff.
First-chance exception at 0x7741ce3b in rankManagedDllTest.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff.
An unhandled exception of type 'System.AccessViolationException' occurred in Unknown Module.
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Visiblement, le problème c'est qu'il ne parvient pas à loader la lib c++ dans l'executable c#, mais pourquoi?
Je me suis assuré que tous les binaires et les pdb soient bien générés dans le même folder, mais ça ne change rien.
Je ne suis pas très à l'aise avec le c++/cli, donc toute piste, remarque, conseil est le bienvenu.
Partager