DllImport 在 Windows XP SP3 上失败,但在 Windows 7 上工作



>我从这个网站创建了一个示例应用程序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)

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

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

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

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

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

相关内容

最新更新