質問

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

役に立ちましたか?

解決

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

私は Nish を読み違えていた/誤解していたようです。__clrcall 修飾子とそれによって解消されるダブルサンキングの問題は、NATIVE クラスのメソッドにのみ適用されます。マネージド クラスのメソッドはすべて、デフォルトでは __clrcall です。これは、振り返ってみると明らかなことです。

明らかにマーカス・ヒーゲの本 エキスパート C++/CLI 利用可能です 無料ダウンロードとして, 215 ページには呼び出し規約をまとめた素敵な表があります。

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