我想使用 LoadLibrary 开发一个插件系统。
我的问题是:我希望我的函数采用 const char*
和 LoadLibrary
采用 LPCTSTR
。
我有一个好主意 --- (LPCSTR)path
这一直给我一个找不到模块的错误。
当前代码如下。如果我取消注释 widepath = L..
行它工作正常。我已经阅读了使用 MFC 的解决方案,但我不想使用 MFC。
当前代码:
bool PluginLoader::Load(char *path)
{
path = "Release\\ExamplePlugin.dll";
LPCTSTR widepath = (LPCTSTR)path;
//widepath = L"Release\\ExamplePlugin.dll";
HMODULE handle = LoadLibrary(widepath);
if (handle == 0)
{
printf("Path: %s\n",widepath );
printf("Error code: %d\n", GetLastError());
return false;
}
int (*load_callback)() = (int (*)()) GetProcAddress(handle, "_plugin_start@0");
if (load_callback == 0)
{
return false;
}
return load_callback() == LOAD_SUCCESS;
}
原文由 Ben 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 LoadLibraryA(),它需要一个 const char*。
采用字符串的 Winapi 函数存在两个版本,一个采用 Ansi 字符串的 A 版本和一个采用宽字符串的 W 版本。函数名称有一个宏,例如 LoadLibrary,它可以扩展为 A 或 W 风格,具体取决于 UNICODE 是否为#defined。您正在使用有效的#define 编译程序,因此您获得了LoadLibraryW()。只需作弊并明确使用 LoadLibraryA() 即可。