C++/CLI 啥类包含全局函数?
Posted
技术标签:
【中文标题】C++/CLI 啥类包含全局函数?【英文标题】:C++/CLI What class encloses global functions?C++/CLI 什么类包含全局函数? 【发布时间】:2017-03-18 21:24:50 【问题描述】:如果我没记错的话,函数必须是 CLR 世界中类的成员,而全局函数在 C++/CLI 中是可能的。这是否意味着这些全局函数是某种隐藏的“全局”类的一部分?如果是这样,出于反射目的,如何获取它的类型?
【问题讨论】:
【参考方案1】:是的,.NET 元数据支持全局函数和变量。在 CLR 源代码中称为“全局类”,它的名字是<Module>
。使用 C# 白话,internal
、abstract
和 sealed
确保您永远不能创建类的实例,尖括号有助于避免创建意外的重复类型。
从技术上讲,您可以考虑一下,您需要 BindingFlags.NonPublic 和 BindingFlags.Static。请记住这是多么不切实际,您需要使用损坏的 C++ 名称来查找任何内容。至少需要链接器 .map 文件或像 ildasm.exe 这样的反汇编程序才能知道名称。请注意,它非常混乱,对于典型的 C++/CLI 项目,很多 CRT 标识符最终都出现在此类中。有点错误。
最后但并非最不重要的一点是,在<Module>
中有代码几乎总是一个错误。除了晦涩难懂的反向调用原因,您总是希望在 ref 类中托管代码。特别是如果你想反思它。更令人担忧的是,将太多的本地 C++ 代码编译为 MSIL。它工作得很好,任何符合 C++03 的代码都可以编译为 MSIL,所以你不能说你基本上是两全其美。将 C++/CLI 与本机 C++ 代码严格分开很重要,使用静态库项目最容易做到。
【讨论】:
【参考方案2】:它实际上是一个名为“
【讨论】:
以上是关于C++/CLI 啥类包含全局函数?的主要内容,如果未能解决你的问题,请参考以下文章