2010-03-19 6 views
1

Je suis confronté à un problème lors de l'utilisation d'une DLL non gérée dans mon application .net et de l'obtention de l'exception "Le moteur d'exécution a rencontré une erreur fatale L'adresse de l'erreur était à 0x79e71bd7, sur thread 0xbb4. code est 0xc0000005 Cette erreur peut être un bogue dans le CLR ou dans les parties non sécurisées ou non vérifiables du code utilisateur.Les sources communes de ce bogue incluent des erreurs de marshaling utilisateur pour COM-interop ou PInvoke, qui peuvent corrompre la pile.FatalExecutionEngineError a été détecté

mon code est ci-dessous ....

[DllImport("ITMSDLL.dll")] 
internal static extern int get_month_mask(ref String theMask,ref String theByt, int theSt_Dow, int theSt_Week, int theEn_Dow, int theEn_Week); 

et callng cette méthode en suivant la méthode en C#

public int GetMonthMask(ref String theMask,ref String theByt, int theSt_Dow, int 
     theSt_Week, int theEn_Dow, int theEn_Week) 
     { 
      return CITMSDLLMethods.get_month_mask(ref theMask, ref theByt, theSt_Dow, 
       theSt_Week, theEn_Dow, theEn_Week); 
     } 

ci-dessus deux méthodes sont de dll wrapper fait en .net.

et la méthode ci-dessus est appelé par le code suivant

aRc = Utility.objCITMSDLL.GetMonthMask(ref aRetMask,ref aMByte, aSt_Dow, aSt_Wk, aEn_Dow, aEn_Wk); 

lorsque vous appelez cette méthode, il émet une exception « FatalExecutionEngineError a été détectée » et le message d'exception prévue dans la partie supérieure.

Répondre

1

Lorsqu'une méthode non managée renvoie une chaîne dans un tampon char, elle est généralement mappée à un StringBuilder dans .NET et non à une chaîne.

Voici un exemple pour GetWindowText, directement à partir pinvoke

int GetWindowText (HWND hWnd, LPTSTR lpString, int nMaxCount);

devient:

extern int GetWindowText statique (IntPtr hWnd, StringBuilder lpString, int nMaxCount);

+0

Bonjour, Merci pour votre réponse. J'ai essayé en utilisant Bulder String mais ce n'était pas utile non plus et en jetant la même erreur. – user603153

+0

Vous devez publier la définition C de la méthode; De cette façon, les gens pourraient jeter un coup d'œil et suggérer une cartographie différente. – Timores

+0

En fait, je n'ai pas la définition de la méthode, je n'ai que le fichier .dll. Cette DLL a été précédemment utilisée dans l'application oracle .fmb. Ce qui suit est la définition utilisée dans le fichier oracle .fmb. – user603153

Questions connexes