4

我添加了 MyAssembly.dll 作为对我的查询的附加引用,并且效果很好:我可以毫无问题地使用其中的各种类。

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

[DllImport("C.dll", CallingConvention = CallingConvention.StdCall, EntryPoint ="CPlusPlusFunction")] internal static extern UInt32 _CPlusPlusFunction([MarshalAs(UnmanagedType.LPWStr)] string file_path);

虽然从引用 MyAssembly.dll(引用 Wrapper.dll,引用 C.dll)的 MyApp.exe 执行此方法时效果很好,但在 LINQPad 中我无法使其工作。

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

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

如果我只为 Wrapper.dll 添加附加参考,我会得到同样的错误。

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

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

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

关于如何让它在 LINQPad 中像在 MyApp.exe 中一样工作的任何想法?

4

1 回答 1

4

您以完全相同的方式执行此操作,您必须将其复制到与 EXE 相同的目录中,以便 Windows 可以找到它。本例中的 LINQPad EXE。C:\Program Files (x86)\LINQPad4 默认。或者 PATH 上的任何目录,c:\windows\syswow64 是臭名昭著的选择。最好不要那样做。

于 2013-09-26T15:53:21.210 回答