1

상황 : 나는 C 프로젝트를 추가 내 C# 솔루션에서vshost32-clr2.exe은 네이티브 코드 디버깅이 비활성화 된 경우 통근 함수를 호출 할 때 응답

(2013 VS).

var OutputArray = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(UInt16)) * OutputLength); 

My_C_Function(OutputArray, Input); 

Int16[] ManagedOutputArray= new Int16[OutputLength]; 
Marshal.Copy(OutputArray, ManagedOutputArray, 0, OutputLength); 
Marshal.FreeHGlobal(OutputArray); 

이 문제가

을 :

"My_C_Function"이 호출되는 함수는이 코드를 호출합니다

[DllImport("My_C_Dll.dll", CallingConvention = CallingConvention.Cdecl)] 
private static extern void My_C_Function(IntPtr OutputArray, int Input); 

다음 C 프로젝트와 C#으로 선언 된 함수를 포함 다음 조건이 모두 만족 될 때 응용 프로그램이 중지됩니다 (실제로 Visual Studio Hosting 프로세스 "vshost32-clr2.exe"입니다).

  • 나는 내가 사용을 할 때 프로젝트 속성

  • 에서 "네이티브 코드 디버깅 사용"을 사용하지 않는 경우 내가 (비주얼 스튜디오에서 시작 응용 프로그램)

  • 부착 된 디버거를 실행할 때 "비주얼을 사용 스튜디오 호스팅 프로세스 "

내 생각

"native code debugging"이 비활성화되어 있으면 C extern 함수를 실행할 수 없으므로 "vshost32-clr2.exe"가 작동하지 않는 것으로 보입니다. "네이티브 코드 디버깅"을 사용하는 경우에만 제공되는 기능이 필요합니다.

내 문제는 AccessViolationException goes away when native code debugging is enabled과 같지만 아무도 이미 이러한 이유가 무엇인지에 대해 이미 답변했습니다.

내 질문 왜? 다른 프로젝트의 경우 이미 다른 문제를 일으키지 않고 다른 C extern 함수를 호출하는 다른 솔루션을 만들었습니다 ("호스팅 프로세스"를 활성화하고 "기본 코드 디버깅"을 아무런 문제없이 사용 가능하게 유지할 수 있음)하지만 두 가지 차이점을 찾을 수는 없습니다 이 오류로 이어지는 솔루션

도움이 될 것입니다.

+0

JIT 디버깅 또는 예외 창을 사용하도록 설정하면 예외 메시지가 나타 납니까? 혼합 모드 디버깅을 위해서는 C# 프로젝트에서 네이티브 코드 디버깅을 활성화해야합니다. 호스트 프로세스를 비활성화하고 기본 코드 디버깅을 활성화하면 응용 프로그램을 정상적으로 디버깅합니까? –

+0

@Jack Zhai 호스팅을 사용하지 않고 네이티브 코드 디버깅을 그대로두면 작동합니다. 네이티브 코드 디버깅없이 호스팅을 사용하는 경우에만 호스팅 프로세스가 중단됩니다. 가능한 예외 (throw 및 사용자 처리되지 않음)에서 멈추도록 Visual Studio를 설정했지만 디버거는 멈추지 않습니다. 단계별로 코드를 실행하면 "My_C_Function"을 호출 할 때 코드가 멈추는 것으로 나타났습니다 – Homer1982

+0

출력 창에 메시지가 표시됩니까? –

답변

0

C++ 프로젝트 속성 -> C/C++ -> 최적화에서 코드 최적화를 비활성화하여 C++ 코드에서 처리되지 않은 예외를 찾을 수있었습니다. 작은 메모리 누수를 수정 한 후 호스팅 프로세스 활성화 및 네이티브 코드 디버깅을 사용하지 않아도 작동하도록했습니다.