SetDllDirectory由于某些unicode符号而失败

SetDllDirectory fails with some unicode symbols

本文关键字:失败 符号 unicode 于某些 SetDllDirectory      更新时间:2023-10-16

我使用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 !№;%()_@#$^&"有什么特别之处呢?我该怎么修?

问题不在于使用国际字符。问题出在分号上。无论出于何种原因,SetDllDirectory都不接受您提供的路径中的分号。我找不到任何文件来解释为什么会这样,但很容易检查它是这样的。

SetDllDirectoryW(L"aa")

会成功,但是

SetDllDirectoryW(L"a;a")

将失败。

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

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

相关文章: