У меня есть прототип следующей функции: https://docs.microsoft.com/en-us/windows/win32/api/wininet/nf-wininet-GetUrlCacheGroupAttributeA
, которая выглядит следующим образом:
[DllImport("wininet", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "GetUrlCacheGroupAttributeA", CallingConvention = CallingConvention.StdCall)]
private static extern bool GetUrlCacheGroupAttribute(
long gid,
uint dwFlags,
uint dwAttributes,
IntPtr lpGroupInfo,
ref uint lpcbGroupInfo,
IntPtr lpReserved);
lpdwGroupInfo
может иметь больше смысла как out
вместо ref
но в остальном я думаю, что это правильно.
Что я не понимаю, так это то, как я должен передать указатель на INTERNET_CACHE_GROUP_INFO
struct lpGroupInfo
(которую я также определил / создал прототип)наряду с этой функцией).Я знаю, как все остальное передается, только этот указатель смущает меня.
Функция для указателя сообщает следующее:
lpGroupInfo - Указатель на структуру INTERNET_CACHE_GROUP_INFO, которая получает запрошенныйинформация.
lpcbGroupInfo - Указатель на переменную, которая содержит размер буфера lpGroupInfo.Когда функция возвращается, переменная содержит количество байтов, скопированных в буфер, или требуемый размер буфера в байтах.
Нужно ли выделять память через Marshal.AllocHGlobal
или что-то еще?Кажется, это говорит о том, что я получу размер структуры только после ее передачи, но как я могу передать ее, если она не определена впервые?Я не совсем понимаю, как создать начальный указатель, а затем, как меня ожидают Marshal.PtrToStructure
.