LINQPad:尝试使用使用[DllImport]访问C ++ dll的程序集

我添加MyAssembly.dll作为我的查询的额外参考,并且工作正常:我可以毫不费力地使用它的各种类。

其中一个MyAssembly.dll类的方法之一引用另一个DLL(Wrapper.dll)。 Wrapper.dll使用[DllImport]访问C ++ dll(C.dll)中的功能:

[DllImport(“C.dll”,CallingConvention = CallingConvention.StdCall,EntryPoint =“CPlusPlusFunction”)]内部静态外部UInt32 _CPlusPlusFunction([MarshalAs(UnmanagedType.LPWStr)] string file_path);

虽然这种方法在从MyApp.exe执行的情况下工作得很好,但是在LINQPad中,我无法使其运行,但它引用MyAssembly.dll(它引用了Wrapper.dll,它引用了C.dll)。

如果我只为MyAssembly.dll添加引用并尝试运行该方法,则会得到:

DllNotFoundException:无法加载DLL'C.dll':无法找到指定的模块。 (来自HRESULT的异常:0x8007007E)

如果我为Wrapper.dll添加额外的参考,我会得到相同的错误。

如果我为Wrapper.dll和C.dll添加额外的参考,我会得到:

元数据文件“C.dll”无法打开 - “试图加载格式不正确的程序”。

如果我只为C.dll添加一个附加参考,我会得到相同的错误。

有什么想法可以让我在LINQPad中像在MyApp.exe中一样工作?


你以完全相同的方式做,你必须将它复制到EXE所在的目录中,以便Windows能够找到它。 在这种情况下的LINQPad EXE。 C: Program Files(x86) LINQPad4默认。 或者PATH上的任何目录,c: windows syswow64都是臭名昭着的选择。 最好不要这样做。

链接地址: http://www.djcxy.com/p/44461.html

上一篇: LINQPad: Attempting to use assembly that uses [DllImport] to access C++ dll

下一篇: Fail to load DLL in Windows 2008 R2 having full permissions control