2014-11-06 117 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