这个问题已经在这里有一个答案:
- 如何处理在C#null或可选的DLL结构参数 1回答
试图P /调用SetFileTime
函数从我的C#程序,我使用了以下特征:
[DllImport(@"kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool SetFileTime(
IntPtr hFile,
ref long lpCreationTime,
ref long lpLastAccessTime,
ref long lpLastWriteTime);
该文件指出以下非托管签名:
BOOL WINAPI SetFileTime(
__in HANDLE hFile,
__in_opt const FILETIME *lpCreationTime,
__in_opt const FILETIME *lpLastAccessTime,
__in_opt const FILETIME *lpLastWriteTime
);
它说的第二,第三和第四个参数,他们可选配:
此参数可以是NULL,如果应用程序并不需要更改这些信息。
而这正是我想做的事:只传递三个日期时间值之一,并且已经设置到其他null
。
我完全失去了如何在的P / Invoke签名来表达这一点。
所以我的问题是:
这是正确的P / Invoke签名(或调用的正确方法),以能够通过null
到SetFileTime
函数的参数?
编辑1:
由于FileInfo
类已经提供了设置文件次可写的属性,你可能会问,为什么我做我自己,而不是使用类。
其原因是,我打算用我的这个功能长路径库,它是用来克服MAX_PATH
限制,因此不能使用标准的.NET函数。
因此使用FileInfo
类是不是一种选择,很遗憾。
编辑2:
我已经使用由汉斯建议的解决方案解决了这个问题。 在那之后,我发现了以下功能用户提供的评论 ,说:
另外,指定用于所述参数中的一个零值具有为指定NULL相同的效果。
虽然我没有检查这是否是真实的,它仍然可能是具有矿山类似的要求别人的选项。