System.DllNotFoundException:无法加载DLL.Dev机器中没有错误,但目标机器中有错误

Mah*_*ubi 5 c# windows dll

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

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

System.DllNotFoundException:无法加载DLL

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

我尝试了很多东西,似乎什么都没有用.我在这篇文章中遵循了解决方案但没有任何效果.

开发和目标机器完全相同.在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);
Run Code Online (Sandbox Code Playgroud)

C++:

static int __declspec(dllexport) cert_exists(int type, LPCSTR cert_str);
Run Code Online (Sandbox Code Playgroud)

更新:

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

kol*_*kol 6

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

  • YEEES.它是Visual C++ Redistributable x86版本而不是修复所有内容的x64!基本上,没有它,操作系统不会读取x86 dll.唯一的另一种方法是在x64中分发dll,但这给了我更大的问题,所以我将让客户安装VC++ x86.非常感谢你的帮助:)我真的很感激. (2认同)