SetDllDirectory失败并带有一些unicode符号

时间:2014-09-09 09:05:59

标签: c++ winapi unicode

我正在使用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 !№;%()_@#$^&"有什么特别之处?我该如何解决?

1 个答案:

答案 0 :(得分:5)

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

SetDllDirectoryW(L"aa")

会成功,但

SetDllDirectoryW(L"a;a")

会失败。

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

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