DllImport在Windows XP SP3上失败但在Windows 7上运行

时间:2014-01-17 12:48:27

标签: c# c windows winapi dll

我从这个站点创建了一个示例应用程序 http://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w 它创建一个C代码并在C#应用程序中使用。

 #include <stdio.h>

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

C#代码:

using System;
using System.Runtime.InteropServices;     // DLL support

class HelloWorld
{
  [DllImport("TestLib.dll")]
  public static extern void DisplayHelloFromDLL ();

  static void Main ()
  {
    Console.WriteLine ("This is C# program");
    DisplayHelloFromDLL ();
  }
}

这在Windows 7上运行良好。我在Windows 7机器上的Visual Studio 2010上构建了代码。当我尝试在Windows XP上运行exe时,它失败并抛出以下异常:无法加载DLL'TestLib.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)

2 个答案:

答案 0 :(得分:1)

最可能的解释是,概率接近1是Windows 7机器安装了MSVC运行时,但XP机器没有。

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

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

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

答案 1 :(得分:0)

在Windows 7上编译一个简单的hello world可执行控制台应用程序,并尝试在Windows XP上单独运行它。它应该比DLL更冗长。它要么抱怨它缺少一些DLL,要么就是32/64位不匹配。