2

我已经读过(在 Nish Sivakumar 的书C++/CLI In Action以及其他地方)你应该在函数调用上使用 __clrcall 装饰器以避免双重重复,以防你知道永远不会从非托管代码调用该方法。Nish 还说,如果方法签名包含任何 CLR 类型,那么 JIT 编译器将自动添加 __clrcall。我不清楚的是在创建 C++/CLI 属性时是否需要包含 __clrcall。从某种意义上说,属性只能从 .NET 语言访问,另一方面,C++/CLI 编译器(我认为)只生成可从托管代码和非托管代码调用的方法(例如 ***_get() )。那么我是否需要在我的属性上使用 __clrcall 修饰符,如果需要,它在哪里?在 get/set 函数本身上?

4

1 回答 1

3

@Mike B-感谢有关 ildasm 的提示-我不知道该工具。

看来我误读/误解了 Nish - __clrcall 修饰符和它消除的双重重击问题仅适用于 NATIVE 类的方法。默认情况下,托管类的所有方法都是 __clrcall - 回想起来似乎很明显。

显然 Marcus Heege 的书Expert C++/CLI可以免费下载,它在第 215 页有一个很好的表格,总结了调用约定。

于 2008-09-17T21:37:51.000 回答