【问题标题】:SetDllDirectory fails with some unicode symbolsSetDllDirectory 因一些 unicode 符号而失败
【发布时间】:2014-09-09 09:05:59
【问题描述】:

我正在使用 SetDllDirectory(实际上是 SetDllDirectoryW)使一些延迟加载的库从特定目录加载。
就像

if (SetDllDirectory(directory.c_str()) == 0)
{
    ERROR_MSG("Failed to set the current dll directory [%d]\n", GetLastError());
}

所以一切正常,大多数时候,"f:/source/trunk 11" 很好,依此类推
但是当它被"f:/source/trunk Gest hieß es !№;%()_@#$^&" 调用时,我从GetLastError 得到ERROR_INVALID_PARAMETER。我可以使用这样的名称创建一个目录,并且可以使用它。
但是SetDllDirectory"Gest hieß es !№;%()_@#$^&" 有什么特别之处呢?我该如何解决?

【问题讨论】:

    标签: c++ winapi unicode


    【解决方案1】:

    问题不在于使用国际字符。问题是分号。无论出于何种原因,SetDllDirectory 不接受您提供的路径中的分号。我找不到任何文档说明为什么会这样,但很容易检查是否如此。

    SetDllDirectoryW(L"aa")
    

    会成功,但是

    SetDllDirectoryW(L"a;a")
    

    会失败。

    AddDllDirectory 也是如此。任何包含分号的路径都会被拒绝。

    我的猜测是,Windows 内部将此信息存储在单个字符串中,使用分号作为分隔符。因此,这些函数必须拒绝包含分号的路径。

    【讨论】:

    猜你喜欢
    • 2014-10-01
    • 2018-11-26
    • 1970-01-01
    • 2019-01-06
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2017-06-08
    相关资源
    最近更新 更多