8

我在 Visual Studio 2012 上使用 WPF 构建了一个 C# 应用程序,该应用程序使用 C++ DLL 并以 .NET4.5 为目标。我有两个项目正在运行,一个用于 C# 项目,另一个用于 C++ DLL 项目。我将这两个项目发布到一个文件夹中,该文件夹在同一文件夹中包含一个.exe用于 C# 和一个.dll用于 C++ 的文件夹。

我在开发它们的机器上运行它们,一切正常。我.exe在其他机器上运行它,它抛出了这个异常:

System.DllNotFoundException:无法加载 DLL

它无法识别同一文件夹中的 DLL。

我尝试了很多东西,但似乎没有任何效果。我遵循了这篇文章中的解决方案,但没有任何效果。

Dev 和 Target 机器是相同的。在 Dev 中,安装了 Visual Studio 2012,但这是唯一的区别。

代码:

C#:

[DllImport(@"Wireless.dll", EntryPoint = "?cert_exists@certificate@CertFuncs@@SAHHPBD@Z", CallingConvention = CallingConvention.Cdecl)]
    static extern int cert_exists(int store, [MarshalAs(UnmanagedType.LPTStr)]string cert_str);

C++:

static int __declspec(dllexport) cert_exists(int type, LPCSTR cert_str);

更新:

如果我在目标机器上安装 Visual Studio 2012,一切正常。如果我删除它,应用程序会再次崩溃。关于 VS 添加什么可以使应用程序工作的任何想法?

4

2 回答 2

9

只是一个猜测:在用户的机器上安装 Microsoft Visual C++ 2012 Redistributable Package。您使用的本机 DLL 可能有其他必须安装的依赖项(尝试Dependency Walker)。如果本机 DLL 需要例如注册表设置、配置文件等,这些也应该存在。它应该以与您在开发机器上安装它的方式相同的方式分发给用户机器。

于 2013-01-29T17:06:17.980 回答
-1

这是由于您的项目构建配置是“调试”(右键单击解决方案''-> 属性-> '配置属性-> 您应该看到所有项目配置设置为'调试')。它需要在您运行 exe 的任何地方安装 Visual Studio(在“调试”模式下构建)。

为了避免这种情况,请将配置更改为“发布”并重建您的项目。

于 2017-01-06T09:34:07.620 回答