c# - 如何在 C# 中读取 IHTMLComputedStyle 接口(interface)的 fontName 属性?

标签 c# .net

根据 documentation ,这个属性给了我一个 TCHAR,但是当我看到源代码时,这是声明:

    [DispId(1011)]
    ushort fontName { get; }

无论如何,我不知道如何从 ushort 中获取 TCHAR 或从 TCHAR 中获取字符串。有人吗?

最佳答案

我明白了,你有问题。 IDL声明是

[propget, id(DISPID_IHTMLCOMPUTEDSTYLE_FONTNAME)] HRESULT fontName([retval, out] TCHAR * p);

好吧,这在技术上是可行的,调用者必须传递一个指向 TCHAR 缓冲区的指针,该缓冲区的大小足以存储返回的字符串。不过,这非常奇怪,在 COM 接口(interface)中,字符串几乎总是作为 BSTR 处理。当调用者没有传递足够大的缓冲区时,TCHAR* 将是等待发生的事故。当客户端程序在没有有效 UNICODE 的情况下编译时,TCHAR 将是完全错误的。

这一定是一个错误,应该是 BSTR*。或者 TCHAR**,有点远景。另一件真正奇怪的事情是,他们将 DispID 分配给方法,但没有从 IDispatch 继承接口(interface)。那简直毫无意义。我认为这不是由知道自己在做什么的 MSFT 程序员编写的。

类型库导入器确实别无选择,只能选择 ushort 作为返回类型,它无法猜测它实际上是一个字符数组。参数上没有 MIDL 属性表明它是一个数组,这是另一件非常奇怪的事情,暗示该参数确实是一个 BSTR*。修补导入库在技术上是可行的,您必须反编译它,编辑 .il 并将其与 ilasm.exe 放回一起。当然,您不能真正对标准 PIA 执行此操作,您必须放弃它。

这里没有满意的答案,这完全是错误的。或许您可以 ping connect.microsoft.com 看看他们对此有何看法。尽管他们有责任将其关闭为“外部”,在这种情况下,Microsoft 支持是您唯一真正的资源。

关于c# - 如何在 C# 中读取 IHTMLComputedStyle 接口(interface)的 fontName 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175958/

相关文章:

c# - 使用自然顺序从文件夹加载文件

c# - 使用 Linq 和 C#,是否可以加入两个列表但在每个项目处交错?

c# - 使用 streamreader/streamwriter 在 C# 中逐行写入文件非常慢

c# - 如何在 xamarin C# 中的 tableLayout 中单击特定行时检索对象

c# - 为什么接口(interface)在 IL 级别作为 "abstract interface"发出?

c# - Web API 和 .NET 标准

c# - Style Setter 中的 UWP 绑定(bind)不起作用

.net - 运行两个实例时自动增量不正确

.net - FileIO.FileSystem.CopyFile() 与 System.IO.File.Copy()

c# - 如何使用 .NET 2.0 安全地托管插件