![](/img/trans.png)
[英]when does unmanaged c++ dll unload from memory when called from C# code using pinvoke
[英]Simple C++ .dll called with pinvoke; Works for me, but no one else
我對C ++一無所知,但我想出了足夠的.dll為特定目的編寫。因為有些代碼我無法讓C#做。
所以我使用Visual Studio 2013創建了這個DLL - > Win32項目 - >動態鏈接庫作為類型,選擇了“空項目”等。
現在我轉到我的C#程序,我有pinvoke部分通過名稱( Legacy.dll
)調用此DLL。 我從C ++編譯DLL,並將它從/ release文件夾復制/粘貼到我的C#應用程序的/ bin / release和/ bin / debug文件夾,然后運行C#應用程序。
它工作正常。 我沒有問題。
但是,當我將文件 - .dll和.exe發送給其他人時,它告訴他們它找不到相同的DLL。 但它顯然存在,它顯然對我有用....
那可能是什么問題呢? 我正在將C#程序和DLL編譯為32位。
問題是我的用戶擁有C ++庫,但它已被偷偷摸摸地更新為需要2013年的那些,這在我的第一次搜索中沒有出現。 我不得不做一個明確的特定搜索來找到這個。
你的操作系統是什么? 您運行的是32位還是64位版本的Windows? 要使.NET程序加載32位本機DLL,您必須確保將.NET項目的體系結構設置為“32位”。 默認情況下,它位於“任何CPU”上,它將根據運行程序的計算機選擇體系結構。 如果您在64位系統上運行該程序,它將期望本機DLL也是64位(這將導致問題)。
我知道這聽起來很傻,但你在C#程序中檢查DLL嗎? (有時用戶可能......'有趣')
例如:
void Initialize()
{
var path = Path.Combine(Environment.CurrentDirectory, "Legacy.dll");
if(!File.Exists(path))
{
// Alert the user that the accompanying DLL is missing...
}
}
除此之外,我會檢查架構。 在64位操作系統上,你是32位嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.