SetDllDirectory失败并带有一些unicode符号

spi*_*orm 4 c++ unicode winapi

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

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

所以一切正常,大部分时间"f:/source/trunk 11"都很好,等等.
但是当它被调用时"f:/source/trunk Gest hieß es !?;%()_@#$^&",我ERROR_INVALID_PARAMETER从GetLastError 得到.我能够创建一个具有这样名称的目录,我可以使用它.
但有什么特别的SetDllDirectory"Gest hieß es !?;%()_@#$^&"?我该如何解决?

Dav*_*nan 5

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

SetDllDirectoryW(L"aa")
Run Code Online (Sandbox Code Playgroud)

会成功,但是

SetDllDirectoryW(L"a;a")
Run Code Online (Sandbox Code Playgroud)

将失败.

同样如此AddDllDirectory.任何包含分号的路径都会被拒绝.

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