簡體   English   中英

使用C#訪問C ++ DLL時出現間歇性訪問沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM