Дисбалансы PInvoke стек

Добрый день,

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

Мой заголовок метода C++ похож на это:

bool __declspec(dllexport) SpiceStart(char* installPath)

Мой код импорта DLL C# следующие:

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

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

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

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

У кого-либо есть какие-либо предложения? Если я удаляю символ* и строка от параметров, то метод работает очень хорошо. Однако я хотел бы смочь передать путь установки приложения к dll от C#.

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

Giawa

5
задан Giawa 24 April 2010 в 23:29
поделиться

1 ответ

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

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

10
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: