- - PR -
[C#] デリゲートをGCの対象から外す方法
«前のページへ
1|2|3|4|5
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-28 10:21
だと思われます。
ぐらいしか、アンマネージドに渡されたコールバックアドレスが無効になるケースは思い浮かばないんですよねぇ。 | ||||||||||||
|
投稿日時: 2007-01-28 14:23
コンパイラで作成されるデリゲート継承クラスは,
悲しいかな runtime managed なんですよね。 その中身は,実行時に VES (Virtual Execution System : いわゆる実行エンジン)によって作られるので 簡単には探れないんですよね。 参考として SSCLI2.0を覗いてみても, その機能はどこはあるの?って感じですから。 ひとつめの引数の object 'object' を _target に ふたつめの引数の native int 'method' を _methodPtr に入れているとのことですけどね。 もちろん,本の説明どおりだという話ですが。 _methodPtrAux は,名前からすると, thunkがネイティブ側に公開しているメソッドポインタ のような気もするけど, 逆に使った時の, ネイティブ側のメソッドを指すポインタを入れておく場所のような気がするんですけどね... デリゲートを逆方向に使うような場合(ネイティブ側のメソッドのラップとして使用)は, _methodPtr と _methodPtrAux は,機能的に逆になるのだろうから, そういうときに,Invokeは,_methodPtrAux を呼び出すんじゃないかと。 SSCLI2.0にそんなようなコメントもありますし。 SSCLI2.0どおりなら void* GetMethodPtrAux() 等で取り出せるようですが。 [ メッセージ編集済み 編集者: 稍丼 編集日時 2007-01-28 15:04 ] |
«前のページへ
1|2|3|4|5