Я пытаюсь заставить неуправляемую C ++ DLL работать с моим C# проектом, при запуске программы через отладчик в VS2019 код работает. При запуске без отладчика приложение аварийно завершает работу при запуске и средство просмотра событий выдает мне информацию об исключении: System.AccessViolationException при вызове C ++ Dll
Я попытался изменить способ использования p / invoke с изменениями того, что у меня есть, хотя могло бы сделай так, чтоб это работало. C ++ не является моей сильной стороной, но DLL не представляет собой ничего сложного и представляет собой просто оператор if, возвращающий строку.
Кто-нибудь может увидеть, где я ошибся здесь? Или предложить какие-либо советы по устранению этой проблемы?
C#
[DllImport("unmanaged.dll", EntryPoint = "checkCPU", CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr checkCPU();
// to call it
string check = Marshal.PtrToStringAnsi(checkCPU());
C ++
extern "C" __declspec(dllexport) std::string checkCPU()
{
if (InstructionSet::SSE41() || InstructionSet::SSE42()) {
return "true";
}
else {
return "false";
}
}
(я знаю, что об этом уже спрашивали несколько раз , покопавшись в inte rnet я не нашел ничего, что могло бы мне помочь.)
Edit
И DLL, и проект - x86, с одной и той же сетевой структурой