C# DllImport在windows XP SP3上失败,但在windows 7上工作

C# DllImport在windows XP SP3上失败,但在windows 7上工作,c#,c,windows,winapi,dll,C#,C,Windows,Winapi,Dll,我从这个站点创建了一个示例应用程序 它创建一个C代码并在C#应用程序中使用 #include <stdio.h> extern "C" { __declspec(dllexport) void DisplayHelloFromDLL() { printf("Hello from DLL !\n"); } } 这在Windows7上运行良好。我已经在Windows7机器上的VisualStudio2010上构建了代码。当我尝试在windows XP上运

我从这个站点创建了一个示例应用程序 它创建一个C代码并在C#应用程序中使用

 #include <stdio.h>

 extern "C"
 {
  __declspec(dllexport) void DisplayHelloFromDLL()
   {
   printf("Hello from DLL !\n");
   }
 }

这在Windows7上运行良好。我已经在Windows7机器上的VisualStudio2010上构建了代码。当我尝试在windows XP上运行exe时,失败并引发以下异常:无法加载DLL“TestLib.DLL”:找不到指定的模块。(HRESULT的例外:0x8007007E)

在Windows 7上编译一个简单的hello world可执行控制台应用程序,并尝试在Windows XP上单独运行该应用程序。它应该比DLL更详细。它可能会抱怨缺少一些DLL,或者存在32/64位不匹配。

最有可能的解释是,Windows 7机器安装了MSVC运行时,而XP机器没有

下载VS2010 MSVC运行时的可再发行版本,并将其安装在XP计算机上。您的代码应该可以工作。运行时已在Windows 7计算机上,因为该计算机是您的开发计算机

FWIW,您的p/invoke不太正确。它无法指定调用约定。应该是:

[DllImport("TestLib.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void DisplayHelloFromDLL();

您是否在XP机器上部署了VS2010 C运行时?通常最好命名执行环境。然而,在本例中,这模糊了您的观点:这与“Windows7与WindowsXP”无关,而是与“开发机器与普通机器”相关@Frédéric已经暗示了这一点。@FrédéricHamidi不,我没有在win xp上部署visual studio 2010。@IInspectable:这是唯一一个不适用于dllImport的代码。但是下面的dllImport很管用。我试了一个简单的hello world exe,就像你说的。这两种方式都很好,没有任何变化。我加入了电话会议。还是不走运。给出同样的错误当然不是。那不是你的主要问题。你应该像我说的那样安装运行时。我现在也安装了运行时。但它无法加载dll。同样的错误。你到底安装了什么?您是否尝试过在概要文件模式下运行Dependency Walker以查看故障发生的位置。XP机器上安装了什么SP?嘿,它成功了。谢谢你对依赖步行者的建议。我发现它仍然抱怨msvcr100.dll丢失。重新安装可再发行版本。工作起来很有魅力!
[DllImport("TestLib.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void DisplayHelloFromDLL();