PaintDelegate ^をlongに変換してrefConパラメータとして送信するにはどうすればTrackTransferCB内で一度変換して呼び出すことができますか?私がそれを代理人に戻すことができる限り、それが変換されている間は何も意味する必要はありません。C++/CLIデリゲート^を長短に変換する
これが一般的な考え方です:
PaintDelegate^ paintDel = ...;
refCon = (long)paintDel; // This conversion doesn't work
...
static OSErr TrackTransferCB(Track t, long refCon) {
(PaintDelegate^)refCon->Invoke(); // This conversion doesn't work
}
変換このように動作しますか?
実際には管理コードで実行され、アンマネージコードから呼び出されます。これを動作させるには静的な関数なので、私は静的でない関数を非静的な非公開のメンバーにアクセスさせたいと思っています。デリゲートの場所を固定することはできますか? – jnm2
これは、GetFunctionPointerForDelegateの機能です。ターゲットインスタンスの参照を格納するための小さなサンクを作成します。ピン留めは許可されていませんが、あなたはラップトップを使って食べる危険があります。 –
パフォーマンスはビデオのすべてのフレームに対してリアルタイムで呼び出されるため、この機能では非常に重要です。辞書ルックアップは十分に速いでしょうか? – jnm2