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# 白话,internalabstractsealed 确保您永远不能创建类的实例,尖括号有助于避免创建意外的重复类型。

从技术上讲,您可以考虑一下,您需要 BindingFlags.NonPublic 和 BindingFlags.Static。请记住这是多么不切实际,您需要使用损坏的 C++ 名称来查找任何内容。至少需要链接器 .map 文件或像 ildasm.exe 这样的反汇编程序才能知道名称。请注意,它非常混乱,对于典型的 C++/CLI 项目,很多 CRT 标识符最终都出现在此类中。有点错误。

最后但并非最不重要的一点是,在<Module> 中有代码几乎总是一个错误。除了晦涩难懂的反向调用原因,您总是希望在 ref 类中托管代码。特别是如果你想反思它。更令人担忧的是,将太多的本地 C++ 代码编译为 MSIL。它工作得很好,任何符合 C++03 的代码都可以编译为 MSIL,所以你不能说你基本上是两全其美。将 C++/CLI 与本机 C++ 代码严格分开很重要,使用静态库项目最容易做到。

【讨论】:

【参考方案2】:

它实际上是一个名为“”(带有尖括号)的类,它不在任何命名空间中。这个类实际上存在于普通的 C# 程序集中。

【讨论】:

以上是关于C++/CLI 啥类包含全局函数?的主要内容,如果未能解决你的问题,请参考以下文章

c语言工程里其它文件引用全局变量?

全局删除冲突重载

c++ 全局静态函数的理解

在c ++中全局声明的动态数组的多个定义[重复]

Yii2 中添加全局函数

如何定义全局函数指针并分配给特定地址