【发布时间】: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