Если я перевожу сигнатуру встроенной функции в C #, который принимает указатель на структуру, я определяю ее как ref
с переведенным struct
в качестве типа.
Что является правильнымКстати, если этот указатель на структуру не является параметром функции, а другим членом структуры?
Действительно ли мне нужно делать все эти вещи Marshal.AllocHGlobal
здесь?
Объект делаетдолжен быть доступен только из собственного кода во время вызова p / invoke.
[StructLayout(LayoutKind.Sequential)]
public struct WINTRUST_DATA
{
public uint cbStruct;
public IntPtr pPolicyCallbackData;
public IntPtr pSIPClientData;
public uint dwUIChoice;
public uint fdwRevocationChecks;
public uint dwUnionChoice;
// Pointer to WINTRUST_FILE_INFO:
// public IntPtr pFile;
// public WINTRUST_FILE_INFO pFile;
// ?
public uint dwStateAction;
public IntPtr hWVTStateData;
public IntPtr pwszURLReference;
public uint dwProvFlags;
public uint dwUIContext;
}
[StructLayout(LayoutKind.Sequential)]
public struct WINTRUST_FILE_INFO
{
public uint cbStruct;
[MarshalAs(UnmanagedType.LPWStr)] public string pcwszFilePath;
public IntPtr hFile;
public IntPtr pgKnownSubject;
}
[DllImport("wintrust.dll")]
public static extern int WinVerifyTrust(IntPtr hWnd, ref Guid pgActionID, ref WINTRUST_DATA pWVTData);