.net - 避免使用 C++/CLI 属性进行双重转换

标签 .net properties c++-cli

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

最佳答案

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

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

显然,Marcus Heege 的书 Expert C++/CLI 已上市 as a free download ,第 215 页有一个很好的表格,总结了调用约定。

关于.net - 避免使用 C++/CLI 属性进行双重转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/86977/

相关文章:

c# - 如何使用 FileSystemWatcher 监视新驱动器

.net - 带有 .Net OR/M 的可配置表前缀?

.net - 适用于 .NET (WPF) 的 iOS 控件

html - 元标记内的属性属性 ="og:title"是什么?

c++ - 错误 3699,为对象创建 GUID

c# - 具有透明背景的文本框

vba - 如何检查对象是否支持vba中的方法?

java - 将 org.apache.commons.configuration.Configuration 转换为 java.util.Properties 的直接方法

javascript - 使用 CEFSharp native 函数不会刷新 DOM

c++-cli - 编译器错误 C2158 : make_public does not support native template types 的最佳解决方法