我对 C++ 一无所知,但我想出了足够的办法为特定目的编写一个 .dll,因为有些代码我无法让 C# 执行。
所以我使用 Visual Studio 2013 -> Win32 项目 -> 动态链接库作为类型创建了这个 DLL,选择了“空项目”等。
现在我转到我的 C# 程序,我有 pinvoke 部分来按名称调用这个 dll (Legacy.dll
)。我从 C++ 编译 DLL,并将它从/release 文件夹复制/粘贴到我的 C# 应用程序的/bin/release 和/bin/debug 文件夹,然后运行 C# 应用程序。
它工作正常。我没有问题。
但是,当我将文件 - .dll 和 .exe 发送给其他人时,它告诉他们找不到完全相同的 DLL。但它显然在那里,它显然对我有用....
那么可能是什么问题呢?我正在将 C# 程序和 DLL 编译为 32 位。
更新
问题是我的用户有 C++ 库,但它已被偷偷更新为需要 2013 年的库,这在我的第一次搜索中没有出现。我必须进行明确的特定搜索才能找到它。
最佳答案
您的操作系统是什么?您运行的是 32 位还是 64 位版本的 Windows?对于加载 32 位 native DLL 的 .NET 程序,您必须确保将 .NET 项目的体系结构也设置为“32 位”。默认情况下,它位于“任何 CPU”上,它将根据运行程序的计算机选择架构。如果您在 64 位系统上运行该程序,它会期望 native DLL 也是 64 位的(这将导致问题)。
关于c# - 使用 pinvoke 调用的简单 C++ .dll;为我工作,但没有其他人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894979/