2010-03-19 4 views
1

.NET 응용 프로그램에서 관리되지 않는 dll을 사용하고 예외가 발생하는 중 문제가 발생했습니다 "런타임에 치명적인 오류가 발생했습니다. 오류 주소는 0xbb4의 0x79e71bd7에있었습니다. 코드는 0xc0000005입니다.이 오류는 CLR 또는 사용자 코드의 안전하지 않거나 확인할 수없는 부분의 버그 일 수 있습니다.이 버그의 일반적인 출처에는 스택을 손상시킬 수있는 COM-interop 또는 PInvoke의 사용자 마샬링 오류가 포함됩니다. " 내 코드는 아래와 같다FatalExecutionEngineError가 감지되었습니다

....

[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); 

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); 
     } 

두 가지 방법이 위 C에서 # 방법에 따라이 방법 callng 닷넷 제 래퍼 DLL에서이다.

및 상기 방법은 예외를 발생이 방법 "FatalExecutionEngineError 검출 된"상단에 지정된 예외 메시지를 호출 할 때 코드를

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

따라 호출된다.

답변

1

관리되지 않는 메서드가 char 버퍼에 문자열을 반환하면 대개 String이 아닌 .NET의 StringBuilder에 매핑됩니다. 여기

는 et Wi ndow Text 함수에 대한 예시 직쇄 pinvoke에서

et Wi ndow Text 함수 INT (HWND HWND, LPTSTR lp S tring으로는 nMaxCount를 INT);

가된다 :

정적 통근 용 INT et Wi ndow Text 함수 (를 IntPtr HWND, StringBuilder의 lp S tring으로, nMaxCount INT);

+0

안녕하세요, 답변 해 주셔서 감사합니다. String bulder를 사용하여 시도했지만 도움이되지 않았으며 동일한 오류가 발생했습니다. – user603153

+0

메서드의 C 정의를 게시해야합니다. 이 방법을 사용하면 여기있는 사람들이 모양을 가지고 다른 매핑을 제안 할 수 있습니다. – Timores

+0

사실 나는 메서드의 정의가 없으며 .dll 파일 만 있습니다. 이 dll은 oracle .fmb 응용 프로그램에서 이전에 사용되었습니다. 다음은 oracle .fmb 파일에서 사용되는 정의입니다. – user603153

관련 문제