簡體   English   中英

簡單的C ++ .dll用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位。

UPDATE

問題是我的用戶擁有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.

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