動作しないように思われるコードがあるため、この質問をするのは少し奇妙ですが、動作します。不満はありませんが、理由を確認したいですか? 笑
簡単に言えば、C# コードからコールバックを受け取る C++ ネイティブ DLL (CLR/マネージ サポートはまったくない) があります。ネイティブ側は、C# 側によって提供される stdcall コールバック関数を格納します。コールバック METHOD (C# の場合) は静的でなければならないといつも思っていましたが、非静的とラムダ式の両方が正常に機能します!? 「this」ポインタはネイティブコードからどのようにマーシャリングされていますか? ネイティブ コードは非インスタンス関数ポインターのみを格納するといつも思っていました。
さて、ある人が IL コードを発行して、ネイティブと非静的マネージド コールバックの間を「ブリッジ」するという記事を見つけました。また、この廃止されたメソッド「Marshal.GetUnmanagedThunkForManagedMethodPtr()」にも気付きました。このメソッドはサポートされなくなりましたが、これは組み込まれていることを意味していると思いますか?
質問の要約:
thunking は、IL コードを発行することによって .NET にネイティブに組み込まれるようになりましたか? もしそうなら、どのバージョンの .NET でこれがネイティブにサポートされましたか?
暗黙の「サンク」は Mono でもサポートされていますか?
IL がマネージ コールバックに対して発行される場合、サンクが参照するインスタンスが削除されるとどうなりますか? IL は削除されていますか、それとも、いわばメモリの「リーク」につながる可能性がありますか?
ありがとう。