我在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软件包。已安装
有任何建议吗?
答案 0 :(得分:2)
您需要按照文档中的描述实施正确的错误检查。
LoadLibrary
的返回值。值NULL
表示失败。如果是这样,请致电GetLastError
以获取扩展错误详细信息。
E.测试GetProcAddress
的返回值。值NULL
表示失败。如果是这样,请致电GetLastError
以获取扩展错误详细信息。 可能LoadLibrary
失败,因为您的DLL链接到未安装在目标计算机上的运行时,或者因为您的DLL链接到XP上不存在的Win32 API函数。
如果你无法从这里解决问题,你可以使用Dependency Walker进行额外的调试。在配置文件模式下使用它来调试加载器尝试加载DLL。这将揭示足够的信息来诊断问题。
答案 1 :(得分:1)
我已经安装了redist版本。它奏效了。