使用C ++ Builder时,VC ++ Dll无法在Windows XP Sp3上运行

时间:2015-07-08 13:27:58

标签: c++ visual-c++ 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中运作良好。没有任何问题。

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

我更改了VC ++ Dll Project" Platform Toolset" as" Visual Studio 2013 - Windows XP(v120_xp)"。没有任何变化。

我检查过Visual C ++ Redistributable软件包。已安装

有任何建议吗?

2 个答案:

答案 0 :(得分:2)

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

  1. 测试LoadLibrary的返回值。值NULL表示失败。如果是这样,请致电GetLastError以获取扩展错误详细信息。 E.测试GetProcAddress的返回值。值NULL表示失败。如果是这样,请致电GetLastError以获取扩展错误详细信息。
  2. 可能LoadLibrary失败,因为您的DLL链接到未安装在目标计算机上的运行时,或者因为您的DLL链接到XP上不存在的Win32 API函数。

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

答案 1 :(得分:1)

我已经安装了redist版本。它奏效了。

enter image description here