[原创] 分享一下写了n年的自用编辑器 — edx | 宜武汇-ag真人国际厅网站

关于com的使用有很多ag真人国际厅网站的解决方案: 

1. 最原始的办法就是通过com的接口头文件,直接使用非双分派的对象接口。

    这是最原始,最高效,最直接也是最简单的方式。这种方式是所有编译器都可以支持的。基本上就相当于调用一个纯虚的接口类。

2. 稍微间接一点的是通过idl文件,其实这与方法1是类似的。只是要通过接口描述文件(idl)先生成标准的c/c 头文件,再引用。

    idl的中间层次为不同种类的语言使用com接口带来了很大的便利。

3. 通过双分派接口调用。这种方案只针对实现了双分派接口的com组件。

    它是通过idispatch获取接口定义,再把打包后的参数发送给com对象,由它自己进行调用的分派。

    由于它是动态调用的,所以性能会差很多。但很适合动态类型的语言以及远程调用。

    当然c/c 里也可以用,只是会比较繁琐。

4. 直接通过tlb引用。这只有微软自家的编译器通过#import扩展才能做到。

    tlb其实也就是把idl里的东西二进制化了,甚至可以与pe合并。

    它带来的好处就是com库的发布变得简单了,只用一个dll文件就能发布所有相关内容。也为动态调用非双分派的com接口带来的便利。

    msvc的实现方式其实无非是在引用它时,动态的为它生成所需的头文件并自动引用而已。

    这大概就是你所说的引用tlb了吧?

其实这些与edx本身没有太大的关系。

方案1,2,3用任何一个c/c 编译器都可以直接做到。

方案4只有用msvc才能直接做到。

其它家编译器不能直接支持tlb,需要通过三方工具生成头文件或是用户自己动态根据tlb创建对象并调用。

在使用方案1,2时,基本上等同于使用c 的抽象类,edx里会有相应的语法提示。

而使用方案3时,由于调用方式不同,c/c 中不可能直接实现对com接口方法进行相关的提示。除非再加个包装类。而且c/c 中很少直接调用idispatch,倒是实现idispatch的很多。

方案4只有msvc支持,语法提示也只有vs才做了。在edx里目前是不支持的。

原文链接:https://bbs.kanxue.com/thread-269628-3.htm

网络摘文,本文作者:15h,如若转载,请注明出处:https://www.15cov.cn/2023/08/27/原创-分享一下写了n年的自用编辑器-edx/

发表评论

邮箱地址不会被公开。 必填项已用*标注

网站地图