com接口

解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)

匿名 (未验证) 提交于 2019-12-03 00:21:02
解决问题 pywintypes.com_error: (-2147221005, '无效的类字符串', None, None) 解决思路 Dispatch里面的参数com接口是不对或不存在的,检查一下是否存在是否有该Com接口 Dispatch("wps.Application") 文章来源: 解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)

不注册COM组件直接调用接口

℡╲_俬逩灬. 提交于 2019-11-28 22:14:11
本文以COM组件AppTest.dll为例,AppTest.dll中提供了ITest接口,在不使用regsvr32命令向系统注册的情况下创建ITest接口并调用。 一、导入组件或类型库; 在C++中使用COM组件,组件需要带有类型库,以公开接口和方法。类型库文件类型为tlb文件,直接#import导入即可。类型库也可以以资源形式编译进COM组件Dll内部,资源类型为TYPELIB,资源号为1即可。如果Dll中已包含类型库,只需#import导入COM组件Dll文件即可。代码如下: #import "AppTest.dll" 二、动态载入COM组件并创建接口。 ITestPtr pTest = NULL; IClassFactoryPtr pClassFactory = NULL; HMODULE hMudule = ::LoadLibrary(_T("AppTest.dll")); if (hModule) { pfnDllGetClassObject pDllGetClassObject = (pfnDllGetClassObject)::GetProcAddress(hMudule, "DllGetClassObject"); if (pDllGetClassObject) { HRESULT hr = pDllGetClassObject(__uuidof(AppTest:

Delphi COM对象

老子叫甜甜 提交于 2019-11-28 04:56:39
作者:巴哈姆特 http://www.cnpack.org(转载请注明出处并保持完整)  如果没有接触过COM对象的话,你会觉得接口真的很麻烦,也许会有:“还不如直接定义一个类更方便”的想法。 的确,没有经过COM封装的接口确实比较麻烦。在我看来,没有经过COM封装的接口似乎没有存在的意义。那么,什么是COM对象呢?它有什么优点呢?接下来开始对COM对象进行一个简单的介绍: COM是个二进制规范,它与实现的语言无关。这样,即使COM对象由不同的编程语言创建,运行在不同的进程空间和不同的操作系统平台,这些对象也能相互通信。COM既是规范,也是实现,它以COM库的形式提供了访问COM对象核心功能的标准接口以及一组API函数,这些API函数用于创建和管理COM对象。COM本质上仍然是客户服务器模式。客户(通常是应用程序)请求创建COM对象并通过COM对象的接口操纵COM对象。服务器根据客户的请求创建并管理COM对象。当然,客户和服务器这两种角色并不是绝对的。 记得我在刚刚接触COM对象的时候,我师傅曾经给我说过:“COM不是Dll,虽然它可能会以后缀名为dll文件呈现在你面前,但是它绝对不是我们传统意义上所说的dll(动态链接库)”。 其实在我看来,进程内的COM对象应该是一个以dll为载体而提供一些特殊服务的特殊的动态链接库。当然,也有进程外的COM。 现在

VC使用ADO

╄→尐↘猪︶ㄣ 提交于 2019-11-28 03:09:05
一、ADO概述   ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。   OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLE DB

关于com组件中idl文件的理解

微笑、不失礼 提交于 2019-11-26 06:10:44
IDL文件: IDL文件主要定义两大类内容:一是定义接口;二是定义类型库。 定义接口的关键字是interface。每个接口定义前面方括号里面的内容是该接口的属性,最重要的是uuid的定义。该部分经过MIDL.exe编译后生成projectName_i.c和projectName_i.h文件,包含着接口本身(属性(uuid,helpstring等)和方法)的信息。该部分作用是定义接口。 定义类型库的关键字是library。一般一个com组件只有一个类型库。该部分包含了COM类的声明及它的接口声明。该部分被编译后生成类型库文件(.tlb)。该部分作用是用于为客户端提供识别COM组件的接口、函数名、参数等信息。 IDL文件中的[]表示对一个接口,接口方法,接口属性,类型库,类的附加说明,也相当于属性设置。 凡是接口,类型库和com类都需要定义它们的guid值。 来源: CSDN 作者: jiangqin115 链接: https://blog.csdn.net/jiangqin115/article/details/103241048

COM组件的集合与包容

大城市里の小女人 提交于 2019-11-26 06:09:36
集合与包容,实质就是组件之间的互相调用。即一个组件使用另一个组件的功能,达到代码复用的作用。只是这种复用是构建在二进制数据上的(因为被复用的组件常常以dll的格式存在),而不是像c++代码复用是以源文件的形式复用。 集合与包容的区别在于: 包容是将内组件的功能进行封装,由外组件提供接口供客户调用,但实质执行任务的仍然是内组件。 集合是将内组件的功能暴露出来供客户调用,让客户感觉好像调用的是外组件的接口一样。 集合实现的方法是先实例化内组件类,返回内组件的IUnknown接口指针pUnk。在外组件的QuryInterface(riid,ppv)中通过if语句根据传入的riid值,调用pUnk->QuryInterface(riid,ppv)返回内组件的指定接口。 来源: CSDN 作者: jiangqin115 链接: https://blog.csdn.net/jiangqin115/article/details/103241113

MFC实现COM组件

╄→尐↘猪︶ㄣ 提交于 2019-11-26 05:58:32
一般而言,ATL实现了对COM组件最好的支持,所以不用MFC实现COM组件。但是MFC实际上也是可以实现COM组件的。 一、MFC DLL优点: MFC com组件可以将MFC的类型作为参数进行传递,但ATL com只能用规定的COM数据类型。但实际上MFC 扩展dll也可以用MFC类型作为参数。 具体代码: https://github.com/moisiet/MFC-COM COM组件与普通的DLL区别在于:1.COM组件需要注册才能使用,而普通的DLL不需要注册,直接LoadLibrary使用;2.COM组件通过暴露接口指针被调用,而普通DLL是暴露函数地址被调用。 MFC实现COM组件必须要选择Automation这个选项。 选择了这个选项才会提供注册,反注册和类工厂函数。 MFC实现COM组件时,实现接口的类必须是继承自CCmdTarget(或者其子类)的类,且必须选择Automation或者Created by ID 这个选项,因为只有该类才提供对IUnknown的支持。 MFC是通过嵌入类真正实现接口的(嵌入类包含再定义的继承自CCmdTarget类中)。 因此MFC实现COM方式与ATL实现COM方式是不一样的,一定要搞清楚。 当给定IID使用QuryInterface查找某个接口的时候,返回的实际并不是接口的指针,返回的是实现接口的内置类实例对象的地址