VC++ 使用 C++ Builder 时 Dll 在 Windows XP Sp3 上不工作

VC++ Dll Not Working On Windows XP Sp3 When Using C++ Builder

我在 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.there 没问题。

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

我已经将 VC++ Dll 项目 "Platform Toolset" 更改为 "Visual Studio 2013 - Windows XP (v120_xp)"。没有任何改变。

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

有什么建议吗?

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

  1. 测试 LoadLibrary 的 return 值。 NULL 值表示失败。如果是这样,请调用 GetLastError 以获取更多错误详细信息。 E. 测试 GetProcAddress 的 return 值。 NULL 值表示失败。如果是这样,请调用 GetLastError 以获取更多错误详细信息。

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

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

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