2014-11-06 145 views
0

我正在開發一個應用程序,該應用程序使用硬件提供程序提供的C++ DLL與某些硬件進行通信。我也有這個DLL的頭文件,但沒有源文件。在我的C#應用​​程序,我試圖導入和調用DLL的功能是這樣的:在C#應用程序中導入並使用C++ DLL函數

public class MyClass 
{ 
    [DllImport("CaGe.dll")] 
    public static extern long someLibraryFunction(); 

    public void callLibFunction() 
    { 
     Console.WriteLine("function call: " + someLibraryFunction()); 
    } 
} 

的library.dll文件位於同一文件夾中的文件MyClass.cs,也是項目的其餘部分文件。然而,當我開始調試會話時,我首先從系統收到一個對話窗口,內容如下:CAGE InitDll:加載庫「CdbClientInit」上的Erro,當我點擊OK後,在我調用庫函數的行上出現一個無法處理的異常。

異常說:System.DllNotFoundException:從HRESULT異常:0x8007045A

我在互聯網上,這可以通過該CaGe.dll需要一個缺少DLL引起上找到,所以我試圖通過把DLL Dependency Walker,但結果對我來說有點混亂。在CAGE.DLL下有WS32_32.DLL,VERSION.DLL,KERNEL.DLL和USER32.DLL選項卡,我認爲我需要的庫是USER32.DLL選項卡下的somwhere,但我不認識它們中的任何一個如果缺少DLL是導致此問題的原因)。

任何意見將非常appretiated :)

+5

問題可能是更可能的是你的程序無法找到' CaGe.dll'。你說它和你的源文件位於同一個目錄中,但這不是你的可執行文件生成的位置(默認情況下)。嘗試將.dll放到你的程序可執行文件所在的Bin \ Debug或Bin \ Release中。 – 2014-11-06 12:54:42

+0

是的,解決了它,謝謝:) – 2014-11-06 12:59:00

回答

-1

更多幫助,使用C++函數在C#中,請查看以下網址

http://www.codeproject.com/Questions/107152/Using-a-C-dll-in-a-C-application

+0

這並沒有真正回答這個問題。提供一個到非現場資源的鏈接,沒有什麼比堆棧溢出沒有任何意義。請不要這樣做。請花時間在這裏包含精華。如果你想包括進一步閱讀的鏈接,那也是很好的。 – 2014-11-06 13:00:24