2010-02-11 7 views
1

Bonjour Excellentissime Stackoverflowiansc non géré ++ dll appelé de C#, se bloque lorsque CSTRING utilisé dans dll

En utilisant Visual Studio 2008 Team System,

J'ai un C++ dll (MfC statiquement liée dll régulière) qui a simple fonction

extern "C" __declspec(dllexport) int MyExportedFunction() 
{ 
    AFX_MANAGE_STATE(AfxGetStaticModuleState()) 

    CString tempString ; 
.... 
} 

le DLLImport de la c application # Tothe dll travaux et je peux intervenir dans cette fonction du débogueur de mon C# Code Cependant (oui ça vient!) intérieur de la fonction « MyExpo rtedFunction ", comme vous pouvez le voir, je instancie un CString, et quand cette instanciation CString est touchée, l'application entière plante et le débogueur me donne

" Impossible d'avancer. le processus a été mis fin actualiser la liste des processus avant de tenter une autre attacher »

que quelqu'un a des suggestions quant à ce que je pourrais faire résoudre ce problème?

ce qui a trait Buzz

+0

C'était un cauchemar pour moi de compiler ma bibliothèque C++ Managed qui était liée à une bibliothèque statique en utilisant CString. Je ne me souviens pas exactement mais il y avait toujours une erreur de lien disant que le CString utilise l'ancienne version et qu'une nouvelle version est déjà liée. Avez-vous essayé d'utiliser std :: string? – A9S6

+0

Copiez et collez les dernières lignes de la fenêtre Sortie dans votre publication. –

+0

Le programme '[2408] RoadSnappa.exe: Managed' s'est terminé avec le code -1073741819 (0xc0000005). Le programme '[2408] RoadSnappa.exe: Native' s'est terminé avec le code -1073741819 (0xc0000005). – Buzz

Répondre

1

programmes MFC nis une CWinApp instance d'objet, theApp, qui gère et d'en supprimer.

MFC DLL définit régulièrement leur propre objet theApp, tandis que DLL d'extension MFC utilise

"theApp" de » un autre module.

Je pense que votre crash est cohérent avec un "theApp" manquant/non initialisé. Si tel est le cas, l'allocation de mémoire échouera et CString utilisera l'allocation de mémoire.

Deux posibilités:

  • Vous appelez une DLL d'extension MFC de .NET. (la DLL d'extension ne fournit pas fournit son propreApp)

  • Vous appelez une DLL MFC régulière, où l'objet theApp n'est pas initialisé correctement.

+0

hmm - bien il ya un constructeur CorgarApp :: CorgarApp() et il est appelé - j'ai bloqué un point d'arrêt en. Bien qu'il n'ait pas de corps. également CorgarApp :: InitInstance est également appelé ... se et il vient d'appeler "CWinApp :: InitInstance" tous qui a été le code généré automagiquement ... Buzz – Buzz

Questions connexes