PInvoke разбалансирует стек - PullRequest
       10

PInvoke разбалансирует стек

5 голосов
/ 25 апреля 2010

Добрый день,

Я работал над dll, который может использовать CORBA для связи с приложением, которое поддерживает сеть. Код работает нормально, если я запускаю его как консольное приложение C ++. Тем не менее, я застрял на экспорт методов как DLL. Методы, кажется, хорошо экспортируются, и если я вызываю метод без параметров, то он работает как положено. Я одержим передачей строки C # методу C ++.

Мой заголовок метода C ++ выглядит так:

bool __declspec(dllexport) SpiceStart(char* installPath)

Код импорта моей C # DLL выглядит следующим образом:

[DllImportAttribute("SchemSipc.dll", CharSet=CharSet.Ansi)]
private static extern bool SpiceStart(string installPath);

Я называю метод так:

bool success = SpiceStart(@"c:\sedatools");

При вызове SpiceStart генерируется исключение «PInvokeStackImbalance», которое «вероятно, потому что управляемая подпись PInvoke не соответствует неуправляемой целевой подписи.»

У кого-нибудь есть предложения? Если я уберу char * и строку из параметров, то метод будет работать нормально. Тем не менее, я хотел бы иметь возможность передать путь установки приложения в DLL из C #.

Заранее спасибо,

Giawa

1 Ответ

10 голосов
/ 25 апреля 2010

Соглашения о вызовах не совпадают. В C ++ объявите функцию с соглашением о вызовах stdcall:

extern "C" bool __declspec (dllexport) __stdcall SpiceStart (char * installPath)

...