管理対象オブジェクトをネイティブ関数に送信して使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/7371775

質問

管理対象オブジェクトをネイティブ関数に送信して使用するにはどうすればよいですか? ジェネラコディセタグプレ

役に立ちましたか?

解決 2

グーグルでMSDNを読み、いくつかのコードを試した後、このメソッドが管理対象オブジェクトを管理対象外の関数に渡すことがわかりました。

これらのメソッドは、Object ^をvoid *に変換し、void *をObject ^に変換する方法を示しています。 ジェネラコディセタグプレ

注:「unmanaged_function」に可変引数がある場合、このメソッドは機能しません。

他のヒント

よりクリーンで優れたアプローチは、を使用することです。gcroot テンプレート。

MSDNからの引用方法:ハンドルを宣言するネイティブタイプ:

gcrootテンプレートは、ガベージコレクションされたヒープに「ハンドル」を提供する値クラスSystem :: Runtime :: InteropServices :: GCHandleの機能を使用して実装されます。ハンドル自体はガベージコレクションされておらず、gcrootクラスのデストラクタによって使用されなくなったときに解放されることに注意してください(このデストラクタを手動で呼び出すことはできません)。ネイティブヒープでgcrootオブジェクトをインスタンス化する場合は、そのリソースでdeleteを呼び出す必要があります。

gcrootを使用するように適合されたサンプルコード(コードはVS 2010を使用してコンパイルおよび実行されます): ジェネラコディセタグプレ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top