【问题标题】:VC++ Dll Not Working On Windows XP Sp3 When Using C++ Builder使用 C++ Builder 时 VC++ Dll 在 Windows XP Sp3 上不起作用
【发布时间】:2015-07-08 13:27:58
【问题描述】:

我在 Visual Studio 2013 中创建了 VC++ Dll。

extern "C"  int  __declspec(dllexport) __cdecl ConvertImageToText(char* dataPath, char* imageFilePath, char* captchaCode)
{
  // to do 
  return 0;
}

我在 Borland C++ Builder 6 中就是这样使用的。

  HMODULE dllHandle = LoadLibrary("Captcha.dll");
  int (__cdecl *ConvertImageToText)(char*,char*,char*);
  ConvertImageToText =(int (__cdecl *)(char*,char*,char*))GetProcAddress(dllHandle, "ConvertImageToText");
  if (ConvertImageToText != NULL )
  {
    ConvertImageToText("","","");
  }else
  {
   ShowMessage("ConvertImageToText pointer not found !");
  }

在win7/8/8.1下运行良好。没有任何问题。

但是在 windows xp sp3 上找不到 ConvertImageToText 的指针。

我已将 VC++ Dll 项目“平台工具集”更改为“Visual Studio 2013 - Windows XP (v120_xp)”。没有任何更改。

我已检查 Visual C++ Redistributable packages.All 已安装

有什么建议吗?

【问题讨论】:

  • 请告诉我们发生了什么。你如何获得dllHandle。它是非空的吗?你为什么不像文档中所说的那样打电话给GetLastError
  • @DavidHeffernan 我已经编辑了问题。我现在将检查 getlasterror。
  • 我检查了返回的msdn.microsoft.com/en-us/library/windows/desktop/… ERROR_SUCCESS :D
  • 你可以试试 SDK 7.1 吗?
  • 最可能的罪魁祸首是 1) LoadLibrary() 失败,您没有检查。也许 DLL 具有 XP 上缺少的依赖项;或 2) 当您为 XP 重新编译 DLL 时,该函数不再导出为“ConvertImageToText”。在 VC++ 中,您必须使用 .DEF 文件从导出的名称中删除装饰。可能 Win7+ 版本的 DLL 是这样做的,但 XP 版本不是。

标签: c++ visual-c++ c++builder


【解决方案1】:

您需要按照文档中的说明实施正确的错误检查。

  1. 测试LoadLibrary的返回值。 NULL 的值表示失败。如果是这样,请致电GetLastError 了解更多错误详情。 E、测试GetProcAddress的返回值。 NULL 的值表示失败。如果是这样,请致电GetLastError 了解更多错误详情。

LoadLibrary 可能会失败,因为您的 DLL 链接到目标计算机上未安装的运行时,或者因为您的 DLL 链接到 XP 上不存在的 Win32 API 函数。

如果您无法从这里解决问题,您可以使用 Dependency Walker 进行额外调试。在配置文件模式下使用它来调试加载程序加载 DLL 的尝试。这将揭示足够的信息来诊断问题。

【讨论】:

    【解决方案2】:

    我已经安装了那个 redist 版本。成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2011-12-17
      • 2013-04-29
      • 2015-12-24
      • 1970-01-01
      相关资源
      最近更新 更多