LoadLibrary 采用 LPCTSTR

新手上路,请多包涵

我想使用 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 许可协议

阅读 693
1 个回答

使用 LoadLibraryA(),它需要一个 const char*。

采用字符串的 Winapi 函数存在两个版本,一个采用 Ansi 字符串的 A 版本和一个采用宽字符串的 W 版本。函数名称有一个宏,例如 LoadLibrary,它可以扩展为 A 或 W 风格,具体取决于 UNICODE 是否为#defined。您正在使用有效的#define 编译程序,因此您获得了LoadLibraryW()。只需作弊并明确使用 LoadLibraryA() 即可。

原文由 Hans Passant 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题