简单的C ++ .dll用pinvoke调用;适合我,但没有其他人

时间:2014-01-03 01:25:20

标签: c# c++ pinvoke

我对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年的那些,这在我的第一次搜索中没有出现。我不得不做一个明确的特定搜索来找到这个。

2 个答案:

答案 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位吗?