Как P / Invoke SetFileTime с нулевыми параметрами? [Дубликат]
This question already has an answer here:
How do I handle null or optional dll struct parameters in C# 1 answerПопытка P / ВызватьSetFileTime
function из моей программы на 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
);
Для 2-го, 3-го и 4-го параметра он говорит, что они могут быть необязательными:
This parameter can be NULL if the application does not need to change this information.
И это именно то, что я хочу сделать: передать только одно из трех значений даты и времени, а остальные установить вnull
.
Я совершенно заблудился, как выразить это с точки зрения подписи P / Invoke.
Therefore my question is:
Какая правильная подпись P / Invoke (или правильный способ вызова), чтобы иметь возможность пройтиnull
кSetFileTime
параметры функции?
Edit 1:
ПосколькуFileInfo
class Вы уже можете задать свойство записи для установки времени файла. Вы можете спросить, почему я делаю это самостоятельно, а не с помощью класса.
Причина в том, что я планирую использовать эту функцию в своемДлинные Пути библиотека, которая используется для преодоленияMAX_PATH
ограничить и, следовательно, не может использовать стандартные функции .NET.
Поэтому, используяFileInfo
класс не вариант, к сожалению.
Edit 2:
Я решил это с помощью решения, предложенного Гансом. После этого я нашелПользовательский комментарий под функцией что говорит:
In addition, specifying a zero value for one of the parameters has the same effect as specifying NULL.
Хотя я не проверял, так ли это, это все же может быть вариантом для других, имеющих аналогичное требование к моему.