2013-04-10 218 views
1

我一直在試圖監視視頻內存以獲得高性能密集型程序。無法導入Visual Studio將C++ DLL導入到Windows上的Visual Studio C#項目

因此,我在C++ Visual Studio應用程序中使用NVIDIA CUDA庫來收集我需要的數據。

不幸的是我需要一個可以與Ruby,C#和我的公司的軟件測試工具一起使用的軟件包。

因此,我決定編譯一個C++ DLL並將其導入到C#Visual Studio項目中進行測試。

我能夠編譯該DLL,但將其導入到我的Visual C#程序中一直是個問題。

我右鍵點擊引用 - >添加引用。然後我點擊瀏覽選項卡並瀏覽到我的DLL的位置; 「TestProgram.dll」和我點擊「OK」

然後我收到以下錯誤消息「的引用到C:不能添加....請確保該文件是可訪問的,並且它是一個有效的程序集或COM組件「。

我迄今爲止嘗試: 1.從我的系統上幾個不同位置導入DLL。 2.移動DLL到我的解決方案資源管理和導入它 3.使用「調用」方法:函數[DllImport(「PathToMyDll」) 4.使用「援引」方法,只是我的DLL名稱。 5.輸入「使用」路徑到我的DLL 6.將dll導出爲.lib文件,而不是

我在做什麼錯?我認爲,如果我使用Visual Studio 2010導出了一個DLL,那麼肯定可以將相同的DLL添加到Visual Studio 2010項目中。

+0

試着看看它與依賴沃克?它應該能夠幫助您更好地診斷dll參考問題。 – 2013-04-10 00:03:27

回答

1

那麼,這是一個有效的大會或COM組件?僅僅因爲它是一個C++ DLL並不意味着它只能用於引用,事實上,大多數不能。它需要是一個託管的DLL或一個COM對象。如果不是這些,那麼您必須從託管程序集中調用非託管代碼。這意味着在存根中定義每個函數。

此處瞭解詳情:how to call a C++ dll exported function from c#

要知道,你也必須處理64/32位的問題,因爲如果DLL編​​譯爲32位,你不能在64位應用程序中使用它。

+0

感謝您的信息。我看着試圖創建一個託管的DLL。但在這個過程中,我發現了一個解決方案,這個解決方案明顯易於實現並完成這項工作。如果我想再試一次,我會保留您給出的解決方案以供將來參考。 – 2013-04-10 16:25:38

0

我找到了解決這個問題的辦法。 CUDA創建一個Windows控制檯應用程序項目。所以解決方案就是使用它來代替DLL。

這很好,因爲Ruby,Test Complete和Visual C#可以從基本的.exe控制檯程序(有一些工作)讀取輸出。

編譯的exe很簡單。我所需要做的就是在啓動程序時傳入一個整數作爲參數,程序將從我的NVIDIA卡中獲取所需的數據。

現在的挑戰將是找到一個與.exe接口的好方法。

相關問題