管理対象オブジェクトをネイティブ関数に送信して使用するにはどうすればよいですか?
-
28-10-2019 - |
質問
管理対象オブジェクトをネイティブ関数に送信して使用するにはどうすればよいですか? ジェネラコディセタグプレ
解決 2
グーグルでMSDNを読み、いくつかのコードを試した後、このメソッドが管理対象オブジェクトを管理対象外の関数に渡すことがわかりました。
これらのメソッドは、Object ^をvoid *に変換し、void *をObject ^に変換する方法を示しています。 ジェネラコディセタグプレ
注:「unmanaged_function」に可変引数がある場合、このメソッドは機能しません。
他のヒント
よりクリーンで優れたアプローチは、を使用することです。gcroot テンプレート。
MSDNからの引用
gcrootテンプレートは、ガベージコレクションされたヒープに「ハンドル」を提供する値クラスSystem :: Runtime :: InteropServices :: GCHandleの機能を使用して実装されます。ハンドル自体はガベージコレクションされておらず、gcrootクラスのデストラクタによって使用されなくなったときに解放されることに注意してください(このデストラクタを手動で呼び出すことはできません)。ネイティブヒープでgcrootオブジェクトをインスタンス化する場合は、そのリソースでdeleteを呼び出す必要があります。
gcroot
を使用するように適合されたサンプルコード(コードはVS 2010を使用してコンパイルおよび実行されます): ジェネラコディセタグプレ
所属していません StackOverflow