我对C ++一无所知,但我想出了足够的.dll为特定目的编写。因为有些代码我无法让C#做。
所以我使用Visual Studio 2013创建了这个DLL - > Win32项目 - >动态链接库作为类型,选择“空项目”等
现在我转到我的C#程序,我有pinvoke部分通过名称(Legacy.dll
)调用此dll。我从C ++编译DLL,并将它从/ release文件夹复制/粘贴到我的C#应用程序的/ bin / release和/ bin / debug文件夹中,然后运行C#应用程序。
工作正常。我没有问题。
然而,当我将文件 - .dll和.exe发送给其他人时,它告诉他们找不到相同的DLL。但它显然存在,它显然对我有用....
那么可能是什么问题?我正在将C#程序和DLL编译为32位。
问题在于我的用户拥有C ++库,但它已被偷偷摸摸地更新为需要2013年的那些,这在我的第一次搜索中没有出现。我不得不做一个明确的特定搜索来找到这个。
答案 0 :(得分:2)
你的操作系统是什么?您运行的是32位还是64位版本的Windows?要使.NET程序加载32位本机DLL,您必须确保将.NET项目的体系结构设置为“32位”。默认情况下,它位于“任何CPU”上,它将根据运行程序的计算机选择体系结构。如果您在64位系统上运行该程序,它将期望本机DLL也是64位(这将导致问题)。
答案 1 :(得分:0)
我知道这听起来很傻,但是你在C#程序中检查DLL了吗? (有时用户可能会......有趣')
例如:
void Initialize()
{
var path = Path.Combine(Environment.CurrentDirectory, "Legacy.dll");
if(!File.Exists(path))
{
// Alert the user that the accompanying DLL is missing...
}
}
除此之外,我会检查架构。你是64位操作系统时是32位吗?