Я работаю над проектом, в котором мне нужно PInvoke для функции secur32!AddSecurityPackageA
, но я все еще изучаю тонкости того, как сделать это вручную, и могу использовать некоторую помощь.
Вотссылки, с которыми я работаю:
И вот пример моего кода, в котором я пытаюсьопределите структуру и вызовите функцию:
[DllImport("secur32.dll", EntryPoint = "AddSecurityPackageA")]
public static extern void AddSecurityPackageA(
ref string pszPackageName,
ref SECURITY_PACKAGE_OPTIONS[] Options
);
[StructLayout(LayoutKind.Sequential, CharSet =CharSet.Ansi)]
public class SECURITY_PACKAGE_OPTIONS
{
public ulong Size;
public ulong Type;
public ulong Flags;
public ulong SignatureSize;
public IntPtr Signature;
}
string dll = @"c:\temp\test.dll";
SECURITY_PACKAGE_OPTIONS[] pkgOpts = new SECURITY_PACKAGE_OPTIONS();
AddSecurityPackageA(ref dll, ref pkgOpts);
Мои вопросы:
- В строках 3 и 4 это правильное использование
ref
, и это в целом правильнов соответствии с документами MSDN? - В строке 14 структура C ++ в MSDN имеет это как пустой указатель, но при исследовании я обнаружил, что эквивалент C # -
IntPtr
.Это правильно, или мне нужно использовать unsafe
? - В общем, нашел ли кто-нибудь действительно хорошие уроки по PInvoke, кроме чтения кода других людей?Я перехожу из Python, так что он немного отличается, и я обнаружил, что «нарисуйте круг, нарисуйте остальную часть совы» или безумно длинную документацию MSDN, в которой делается много предположений.
Спасибо!