有一个C++程序,我要在C#项目中调用C++程序中的DLL文件,下面是我做过的一些操作:
 
 第一步:直接在.net中添加dll应用报错“找不到类型库” 第二步:用DOS注册DLL文件 regsvr32 报错“找不到指定的模块” 第三步:直接把DLL文件拷贝到windows/system32目录下,并且也拷贝到项目的bin目录中用,用代码               [DllImport("LedCtrl.dll")]  // LedCtrl.dll C++程序中的dll文件               public static extern bool LSN_IsPower();   //LSN_IsPower c++程序中的一个方法               调用,程序运行报错 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)以上几种引用DLL文件的方法都试过了无效,请问大家有什么解决方案给个支持
写了一下代码用来打开DLL文件。。其它的DLL文件可以打开。。就是不能打开LedCtrl.dll    ///<summary>
    /// API LoadLibrary
    ///</summary>
    [DllImport("Kernel32")]
    public static extern int LoadLibrary(String funcname);    ///<summary>
    /// API GetProcAddress
    ///</summary>
    [DllImport("Kernel32")]
    public static extern int GetProcAddress(int handle, String funcname);    ///<summary>
    /// API FreeLibrary
    ///</summary>
    [DllImport("Kernel32")]
    public static extern int FreeLibrary(int handle);
  这是C++中源码的调用DLL
    int dllint= LoadLibrary("LedCtrl.dll");
if (!dllint)
{
dllint= LoadLibrary("..\\LedCtrl.dll");
return false; 
}
大家帮忙看看。。用什么方式能够在C#中调用C++的DLL文件
谢谢!

解决方案 »

  1.   

    用Depends工具分析一下,看C++ dll文件是否缺少一些依赖项? 
      

  2.   

    把LedCtrl.dll文件拷贝到c#的debug和release目录(也就是你c#的exe文件所在目录)下试试看,
      

  3.   

    是B/S架构的。。只拷贝到了Bin目录下。。还有Window\system32目录下也复制进去试了试
      

  4.   

    我也碰到过这种情况,问题正如一楼说的:缺少依赖项
    解决办法是把跟dll有关的文件全部放在bin目录下 然后Import
      

  5.   

    楼上说的这种方法,我还有些不行,错误依然是
    找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。 
      

  6.   

    原来的C++生成的Dll可能没有用extern声明,导致无法用DllImport这种方式引用
      

  7.   

    LZ,根据你的操作,发现几个问题:
    1、“直接在.net中添加dll应用报错“找不到类型库””
            C++的动态库不能直接添加到net工程里。
    2、“用DOS注册DLL文件 regsvr32 报错“找不到指定的模块””
           你些的是动态库,而非COM组件,所以不能注册。
    3、“调用,程序运行报错 找不到指定的模块”
           这类问题,一般是由于你的动态库,还依赖别的动态库,用VC的DEPENDS.EXE工具打开一看就能知道。
      

  8.   

    你这个问题是缺少关联的DLL文件,将这几个动态链接库也拷进去就行了EDSDK.dll,LedCtrl.dll,NkdPTP.dll,NkdPTPDi.dll,LED设置8里有这几个文件,LED设置10里只有LedCtrl.dll这个文件,如果你是用的LED设置10里的DLL,那就把LED设置8里的这几个文件拷进你软件的运行目录就行了EDSDK.dll,NkdPTP.dll,NkdPTPDi.dll。