2

メソッドがアンマネージ コードから呼び出されないことがわかっている場合は、関数呼び出しで __clrcall デコレータを使用してダブルサンクを回避する必要があることを(Nish Sivakumar の著書C++/CLI In Actionなどで) 読みました。Nish はまた、メソッド シグネチャに CLR 型が含まれている場合、JIT コンパイラは自動的に __clrcall を追加すると述べています。C++/CLI プロパティを作成するときに __clrcall を含める必要があるかどうかはわかりません。ある意味では、プロパティは .NET 言語からのみアクセスできます。一方、C++/CLI コンパイラ (私が思うに) は、マネージ コードとアンマネージ コードの両方から呼び出し可能なメソッド (例: ***_get() ) を生成するだけです。では、プロパティで __clrcall 修飾子を使用する必要がありますか? もしそうなら、それはどこに行きますか? 取得/設定機能自体について?

4

1 に答える 1

3

@MikeB-ildasmのヒントをありがとう-私はそのツールについて知りませんでした。

Nishを誤解/誤解したようです-__clrcall修飾子とそれが排除するダブルサンキングの問題は、NATIVEクラスのメソッドにのみ適用されます。管理対象クラスのすべてのメソッドは、デフォルトで__clrcallです。これは振り返ってみると明らかなようです。

明らかに、MarcusHeegeの本ExpertC ++ / CLI無料でダウンロードでき、215ページに呼び出し規約をまとめたすばらしい表があります。

于 2008-09-17T21:37:51.000 に答える