c# - DllImport 在 Windows XP SP3 上失败,但在 Windows 7 上有效

标签 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)

最佳答案

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

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

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

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

关于c# - DllImport 在 Windows XP SP3 上失败,但在 Windows 7 上有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21186426/

相关文章:

Linux 客户端从 Windows NPS 服务器请求证书

c++ - 'CheckTokenMembership' 检查管理员权限 C++

C# Windows 媒体播放器 AxHost 错误 : Failed to create compopnent 'AxHost'

c - 使用原始 rijndael 构建 PHP 扩展,正确加密/解密,但尾随额外字节

c++ - 为什么结构体的 sizeof 不等于每个成员的 sizeof 之和?

c++ - Bison 将 C 函数指针作为函数调用?

windows - Microsoft Server 中缺少 Microsoft Print to PDF 驱动程序

c# - ASP.NET锁线程方法

c# - 如何使用 Ninject 扫描通用类型的所有实现

c# - 确定 MailItem 是否在撰写或阅读模式下打开