C++/CLI什么类包含全局函数?

Mon*_*nad 3 clr global c++-cli

如果我没记错的话,函数必须是CLR世界中一个类的成员,然而在C++/CLI中可以实现全局函数.这是否意味着这些全局函数是某种隐藏的"全局"类的一部分?如果是这样的话,为了反思的目的,如何获得它的类型呢?

Han*_*ant 5

是的,.NET元数据支持全局函数和变量.在CLR源代码中称为"全局类",其名称为<Module>.使用C#白话,它是internal,abstract并且sealed确保你永远无法创建类的实例,尖括号有助于避免产生意外的副本类型.

从技术上讲,你可以反思它,你需要BindingFlags.NonPublic和BindingFlags.Static.请记住这是多么不实用,你需要使用受损的C++名称来找回任何东西.至少需要链接器.map文件或像ildasm.exe这样的反汇编程序才能知道名称.请注意它非常混乱,许多CRT标识符最终出现在此类中,用于典型的C++/CLI项目.一点虫子.

最后但并非最不重要的是,拥有代码几乎总是错误的<Module>.除了隐藏的反向pinvoke原因外,您总是希望在ref类中使用托管代码.特别是如果你想反思它.更令人担忧的是,将过多的本机C++代码编译为MSIL.它运行得很好,任何符合C++ 03的代码都可以编译成MSIL,所以你不能说你基本上都是两个世界中最糟糕的.严格地将C++/CLI与本机C++代码分离是非常重要的,最容易使用静态库项目完成.