2010-04-24 4 views
5

안녕하세요, 내가 네트워크 인식 응용 프로그램에 통신하기 위해 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는

답변

10

호출 규칙이 일치하지 않습니다.

통근 "C"BOOL __declspec (dllexport) __stdcall SpiceStart (* CHAR의 installPath)

+3

+1 : C++에서 stdcall을 호출 규칙과 기능을 선언한다. 또는 DllImportAttribute에서 호출 규칙을 지정하십시오. –

+0

완벽 - 그 일을 했어! 감사 – Giawa

관련 문제