Я искал интернет по всему миру, но не нашел хорошего объяснения.
Мой вопрос довольно прост.
У меня есть DLL, которая имеет функцию Initialize, а один из параметров - указатель, который получит дескриптор, который будет использоваться с последующими вызовами. Другим параметром является строка, которую я буду перечислять для полноты. Подпись, которую я использую, (в простой форме):
[DllImport(MyDll)]
static extern bool Initialize([In] string name, out IntPtr handle);
Подпись в самой DLL записывается как: Initialize(LPTSTR name, HANDLE handle)
с комментарием "HANDLE: указатель на местоположение, которое получит дескриптор".
И последующие вызовы находятся в форме
[DllImport(MyDll)]
static extern bool DoSomething(IntPtr handle, uint randomParameter);
Я читал о SafeHandle
, и мне было интересно, могу ли я использовать его для подстановки для моего дескриптора IntPtr. И если смогу, как мне это сделать? Расширение абстрактного класса SafeHandle не является проблемой, но могу ли я напрямую подставить мой IntPtr для SafeHandle (и использовать по умолчанию Marshalling) или мне нужно сделать что-то лишнее?