它在C#方面意味着什么?

 手机用户2502914831 发布于 2023-02-08 13:01

我发现以下编译器生成的代码使用DotPeek分析.NET程序集之一:

[UnsafeValueType, NativeCppClass]
[StructLayout(LayoutKind.Sequential, Size = 16)]
internal struct DWriteTextAnalysisNode
{
}

我想知道它意味着什么?如何在C#中重写它?特别是这部分:


Hans Passant.. 7

您在PresentationCore.dll中找到了这个.您正在查看使用C++/CLI编写的代码,而不是C#.它是C#和VB.NET之外的三种主要Microsoft .NET语言之一.绝对是丑陋的继女,C++/CLI的原因在于它无与伦比的能力与用C或C++编写的本机代码互操作.

它在PresentationCore,System.Data中得到了很多用处,它包含了大量的本机代码互操作,以利用现有的Microsoft apis.在这种情况下,它是DirectWrite,一个文本呈现api.它是一个相当复杂的原生api,远远超出了标准pinvoke的互操作能力.C++/CLI支持直接使用本机COM样式的接口.

C++/CLI的一个方面是本机C++接口和类可以渗透到程序集元数据中.这是一个缺陷,它没有很好的方法来抑制本机类型的可见性.只有相反,使它们可见#pragma make_public.C++/CLI编译器必须为与程序集元数据兼容的类型生成元数据定义.由于这些是本机类型,因此最接近的合理匹配是值类型.它完全不透明,你没有看到类型的成员.只是一个blob,非常类似于C#中的固定大小缓冲区类型.

所以这只是一件神器.在C#中做同样的事情没有明智的方法,也没有理由.

1 个回答
  • 您在PresentationCore.dll中找到了这个.您正在查看使用C++/CLI编写的代码,而不是C#.它是C#和VB.NET之外的三种主要Microsoft .NET语言之一.绝对是丑陋的继女,C++/CLI的原因在于它无与伦比的能力与用C或C++编写的本机代码互操作.

    它在PresentationCore,System.Data中得到了很多用处,它包含了大量的本机代码互操作,以利用现有的Microsoft apis.在这种情况下,它是DirectWrite,一个文本呈现api.它是一个相当复杂的原生api,远远超出了标准pinvoke的互操作能力.C++/CLI支持直接使用本机COM样式的接口.

    C++/CLI的一个方面是本机C++接口和类可以渗透到程序集元数据中.这是一个缺陷,它没有很好的方法来抑制本机类型的可见性.只有相反,使它们可见#pragma make_public.C++/CLI编译器必须为与程序集元数据兼容的类型生成元数据定义.由于这些是本机类型,因此最接近的合理匹配是值类型.它完全不透明,你没有看到类型的成员.只是一个blob,非常类似于C#中的固定大小缓冲区类型.

    所以这只是一件神器.在C#中做同样的事情没有明智的方法,也没有理由.

    2023-02-08 13:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有