Я пишу приложение C#, которое использует статический Lib C++. Я завернул Lib в .dll, но столкнулся с проблемой. Когда я вызываю функцию .dll, я получаю исключение System.Stackoverflow
.Исключение Stackoverflow при вызове dll, которое использует статический lib
Мне нужно использовать .lib, поскольку он уже используется в другом месте. Мне нужны решения, которые позволят мне общаться с lib из моей программы на C#.
C#
CreateRegistryLocation(mPath);
[DllImport("Wrapper.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int CreateRegistryLocation(string key);
C++ .dll
extern "C"
{
__declspec(dllexport) int CreateRegistryLocation(const char* key)
{
return RegistryNamespace::CreateRegistryLocation(key);
}
}
C++ .lib
extern "C"
{
int CreateRegistryLocation(const char* key);
}
Если удалить вызовы к экспромты из DLL, то связь между DLL и приложение, похоже, работает так, как я ожидаю. Я удалил тело в .lib и сделал его просто возвратом 0, поэтому я не верю e body функции lib имеет отношение к проблеме. Я не назначаю возвращаемое значение чему-либо в C#, поэтому я не вижу рекурсивной проблемы. В настоящий момент код должен просто называться exe -> Dll -> Lib, а значение 0 должно возвращать резервную цепочку.
Любое понимание было бы очень оценено.
Если вы установили точку останова в функцию CreateRegistryLocation вашей библиотеки, она туда попала? Если да, проверьте, правильно ли настроен ваш параметр ... – michaelb