[英]Intermittent Access Violation when using C# to access C++ DLL
我正在從c#鏈接到一個非常復雜的c ++ dll。 我需要創建很多dllexport函數,以便可以在C#中使用dll。 首先,我添加了一個.cpp文件並創建了一個簡單的測試函數:
C ++:
extern "C" __declspec(dllexport) int32_t Test(){
return 10;
}
C#:
[STAThread]
static void Main()
{
Console.WriteLine(Test());
}
[DllImport("Test.dll", EntryPoint = "Test", CallingConvention = CallingConvention.Cdecl,ExactSpelling = true)]
public static extern Int32 Test();
此測試在90%的時間內都能正常工作,然后突然出現....
The program '[4712] Test.vshost.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.
一切似乎都很好,不知道是什么原因導致的,甚至不知道如何開始查找問題。 如此間歇是很奇怪的。 我實際上不是C ++程序員,所以我不知道是什么原因導致了這種行為,甚至不知道如何調試和發現問題。
希望有一個善良的靈魂能有所幫助。
這個
SetLastError = true
除非您使用Windows API,否則它是沒有用的。
並設置
CallingConvention = CallingConvention.Cdecl
喜歡
[DllImport("Test.dll", EntryPoint = "Test", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
請注意,除了您的方法之外,還有其他代碼可以執行。 DLL可以(並且經常)具有DllMain方法。 在這種方法中,通常會初始化dll的“全局”變量,因此必須一次調用一次。 通常至少兩次DLL_PROCESS_ATTACH
此方法:加載dll時使用DLL_PROCESS_DETACH
,進程結束/卸載dll時使用DLL_PROCESS_DETACH
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.