gpt4 book ai didi

c++-cli - C++/CLI 哪个类包含全局函数?

转载 作者:行者123 更新时间:2023-12-01 08:50:56 29 4
gpt4 key购买 nike

如果我没记错的话,函数必须是 CLR 世界中类的成员,而全局函数在 C++/CLI 中是可能的。这是否意味着这些全局函数是某种隐藏的“全局”类的一部分?如果是这样,出于反射目的,人们将如何获取其类型?

最佳答案

是的,.NET 元数据支持全局函数和变量。在CLR源代码中称为“全局类”,它的名字是<Module> .使用 C# 白话,是 internal , abstractsealed为确保您永远无法创建类的实例,尖括号有助于避免创建意外的重复类型。

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

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

关于c++-cli - C++/CLI 哪个类包含全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42880060/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com