避免使用C ++ / CLI属性进行双重处理
时间:2020-03-05 18:59:51 来源:igfitidea点击:
我读过(在Nish Sivakumar的书《 C ++ / CLI In Action》中),我们应该在函数调用上使用__clrcall装饰器,以避免重复处理,以防万一,我们将永远不会从非托管代码中调用该方法。 Nish还说,如果方法签名包含任何CLR类型,则JIT编译器将自动添加__clrcall。对我来说不清楚的是,在创建C ++ / CLI属性时是否需要包括__clrcall。从某种意义上说,只能从.NET语言访问属性,另一方面,C ++ / CLI编译器(我认为)只是生成可从托管代码和非托管代码中调用的方法(例如*** _ get())。因此,我需要在属性上使用__clrcall修饰符吗?如果是,它将移到哪里?在获取/设置函数本身上?
解决方案
回答
@Mike B感谢我们提供有关ildasm的技巧,我对该工具不了解。
似乎我对__clrcall修饰符和Nish的双重思想问题不了解/误解了,它仅适用于NATIVE类的方法。缺省情况下,所有Managed类的方法都是__clrcall,回想起来似乎很明显。
显然,Marcus Heege的书Expert C ++ / CLI可免费下载,并且在第215页上有一个漂亮的表格,该表格总结了调用约定。