![]() |
1
2
有两种COM接口。您熟悉的是那些将自己限制在被称为“OLE自动化”的COM规范的一个子集的规范。在这个术语与安全灾难联系起来之前,也被称为ActiveX。 自动化兼容接口几乎可以从任何语言中使用。它们通常继承自IDispatch,允许从脚本语言使用它们。并且限制自己只使用自动化兼容的类型作为方法参数。与.NET值类型、字符串的bstr、数组的safearray、非类型化参数的variant比较,这些简单的东西与.NET的system.object非常相似。 他们很好支持的另一个特性是类型库,相当于.NET元数据。编译器用来知道如何调用接口方法。IDE使用类型库自动生成互操作库,这样您就可以直接创建包装类并从.NET代码调用方法。 好吧,这是好消息。坏消息是周围有很多COM接口不使用自动化限制。它们通常从iunknown继承,并使用不好封送的函数参数。类似结构。窗口中一个非常大且可见的组件就是shell。Windows资源管理器。 这也是iaactivedesktop适合的地方,它是一个shell接口,从iunknown继承。它在shlobj.h sdk头文件中声明,甚至没有IDL文件。因此,没有办法用它的定义来获取类型库。它使用不兼容的参数类型,如lpcwstr(指向字符串的原始指针)而不是bstr。以及结构指针,如lpccomponent和lpwallpaperopt。clr interop支持无法正确封送。 在C中使用接口在技术上并非不可能,但您必须重新声明接口。非常小心,弄错很容易。事实上,已经这样做的源代码很难找到,这暗示了它有多困难。这完全属于“不可能,但理智的程序员想要维护这样的代码”类别。shell是非托管C++代码的域。以及一组精力充沛的程序员,因为调试shell扩展是非常痛苦的。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |