1

给定

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern int GetDllDirectory(int nBufferLength, StringBuilder lpPathName);

StringBuilder tmp = new StringBuilder(10240);
if (GetDllDirectory(10240, tmp) == 0)
{
 int err = Marshal.GetLastWin32Error();
}

MSDN指出

如果函数成功,则返回值是复制到 lpBuffer 的字符串的长度,以字符为单位。

我收到了0,错误0也是。这里有什么问题?

4

1 回答 1

4

DLL 目录的默认值为空。您看到的返回值为零只是告诉您没有可检索的内容。

您必须先将 DLL 目录设置为某个值,然后才能期望GetDllDirectory返回除零以外的任何值。SetDllDirectory在你打电话之前添加一个电话GetDllDirectory来说服自己。或者尝试从一个简单的 C++ 程序调用并观察完全相同的行为。

该文档在这里肯定会产生误导。我不确定您如何区分实际失败与未设置值。如果出现错误,可能GetLastWin32Error()会返回一个非零值。也就是说,故障模式很少。就我个人而言,我倾向于将零视为 DLL 目录没有价值的意思。

于 2013-11-06T20:52:59.397 回答