안녕하세요, 내가 네트워크 인식 응용 프로그램에 통신하기 위해 CORBA를 사용할 수있는 DLL에 노력하고있다PInvoke를 스택을
을 불균형. 코드를 C++ 콘솔 응용 프로그램으로 실행하면 코드가 제대로 작동합니다. 그러나, 나는 dll로 메소드를 내보내는 것에 매달렸다. 메서드는 잘 수출하는 것, 그리고 매개 변수가없는 메서드를 호출하면 예상대로 작동합니다. 저는 C# 문자열을 C++ 메소드에 전달하는 것에 매달렸습니다.
내 C++ 방법 헤더는 다음과 같습니다
다음과bool __declspec(dllexport) SpiceStart(char* installPath)
내 C# DLL 가져 오기 코드가 될 때 :
bool success = SpiceStart(@"c:\sedatools");
:
[DllImportAttribute("SchemSipc.dll", CharSet=CharSet.Ansi)]
private static extern bool SpiceStart(string installPath);
나는 방법과 같이 호출 SpiceStart를 호출하면 "PInvokeStackImbalance"예외가 발생합니다. 이는 "관리되는 PInvoke 서명이 관리되지 않는 대상 서명과 일치해야합니다. "
누구에게 의견이 있습니까? 매개 변수에서 char * 및 string을 제거하면 메서드가 제대로 실행됩니다. 그러나 C#에서 dll 응용 프로그램의 설치 경로를 전달할 수 싶습니다. 사전에
감사합니다,
Giawa는
+1 : C++에서 stdcall을 호출 규칙과 기능을 선언한다. 또는 DllImportAttribute에서 호출 규칙을 지정하십시오. –
완벽 - 그 일을 했어! 감사 – Giawa