私はインターネットを広範囲に検索しましたが、適切な説明が見つかりませんでした。
私の質問はとても簡単です。
Initialize という関数を持つ DLL があり、パラメーターの 1 つは、後続の呼び出しで使用されるハンドルを受け取るポインターです。もう 1 つのパラメーターは、完全を期すためにリストする文字列です。私が使用している署名は(単純な形式で)次のとおりです。
[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 に直接置き換える (そして既定のマーシャリングを使用する) ことはできますか?それとも何か特別なことをする必要がありますか?