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 安装
有什么建议吗?
您需要按照文档中的描述实施正确的错误检查。
- 测试
LoadLibrary
的 return 值。 NULL
值表示失败。如果是这样,请调用 GetLastError
以获取更多错误详细信息。
E. 测试 GetProcAddress
的 return 值。 NULL
值表示失败。如果是这样,请调用 GetLastError
以获取更多错误详细信息。
可能 LoadLibrary
失败是因为您的 DLL 链接到目标计算机上未安装的运行时,或者因为您的 DLL 链接到 XP 上不存在的 Win32 API 函数.
如果您无法从这里解决问题,您可以使用 Dependency Walker 进行额外调试。在配置文件模式下使用它来调试加载程序加载 DLL 的尝试。这将揭示足够的信息来诊断问题。
我已经安装了那个 redist 版本。成功了。
我在 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 安装
有什么建议吗?
您需要按照文档中的描述实施正确的错误检查。
- 测试
LoadLibrary
的 return 值。NULL
值表示失败。如果是这样,请调用GetLastError
以获取更多错误详细信息。 E. 测试GetProcAddress
的 return 值。NULL
值表示失败。如果是这样,请调用GetLastError
以获取更多错误详细信息。
可能 LoadLibrary
失败是因为您的 DLL 链接到目标计算机上未安装的运行时,或者因为您的 DLL 链接到 XP 上不存在的 Win32 API 函数.
如果您无法从这里解决问题,您可以使用 Dependency Walker 进行额外调试。在配置文件模式下使用它来调试加载程序加载 DLL 的尝试。这将揭示足够的信息来诊断问题。
我已经安装了那个 redist 版本。成功了。