Добрый день,
Я работал над 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
Соглашения о вызовах не совпадают. В C ++ объявите функцию в соответствии с соглашением о вызове stdcall:
extern «C» bool __declspec (dllexport) __stdcall SpiceStart (char * installPath)