COM
Marcelxx
这个作者很懒,什么都没留下…
展开
-
COM入门(1)
1. 什么是COMCOM全称是Component Object Model,中文译为组件对象模型。COM组件在物理上是一些DLL或EXE文件;COM组件实现二进制级别的代码重用;COM是与程序设计语言无关,理论上任何语言都可以开发和调用COM组件;COM组件用引用计数实现生命周期的自我管理;COM组件调用者能够查询它所支持的接口;COM组件的位置对调用者是透明的;COM组件依赖于注册表;COM转载 2013-10-08 10:00:00 · 879 阅读 · 0 评论 -
extern "C"和_stdcall
xtern "C" __declspec (dllexport) char* __stdcall SQLFetch(const char* fieldname);C語言中extern cc与c++程序连接问题 它们之间的连接问题主要是因为c c++编绎器对函数名译码的方式不能所引起的,考虑下面两个函数 /* c*/ int strlen(char* string) { ...转载 2013-10-13 21:44:35 · 870 阅读 · 0 评论 -
COM编程技术基础
一: 客户程序在与COM组件进行交互时,只需知道与哪个COM对象进行交互即可,而不必关系组件模块的具体名称和位置,即COM对象的位置对客户是透明的。客户将通过128位的GUID来完成对象的创建和初始化工作。对于COM对象,此全局标识符也被称作CLSID。 创建GUID可以使用COM库提供的CoCreateGuid()API函数,每一个注册了的COM对象在系统注册表的HKEY_原创 2013-10-12 14:49:41 · 1050 阅读 · 0 评论 -
IDispatch接口
简介: IDispatch接口能接收一个函数的字符串名称,并执行这个函数。 解释性语言跟宏语言,要调用COM组件的自定义接口,都是通过自动化控制程序把自定义接口中的函数名称的字符串跟函数参数传递给IDispatch,让IDispatch间接地去执行自定义接口中的函数。函数: GetIDsOfNames函数将读取一个函数名称,并返回其调度ID。原创 2013-10-12 13:52:38 · 1092 阅读 · 0 评论 -
组件和接口
接口: 接口的定义#define interface struct如下定义接口:#include using namespace std;#define interface structinterface IX{ virtual void Fx1()=0; virtual void Fx2()=0;};interface IY{ virtual void F原创 2013-10-12 11:26:22 · 3235 阅读 · 0 评论 -
COM库
COM库 组件的对象和接口模型给用户提供了一种构建组件的规范,用户利用这种规范来创建自己的组件,为了协助用户更有效率地创建组件,MS操作平台提供了有关COM的一些列代码。 COM库实现了很多功能,用户通过调用COM库的函数来完成组件的相关操作。一般用户创建一个组件对象,进而调用组件的接口成员函数,最后释放组件对象,整个过程中都要用到COM库。原创 2013-10-11 17:33:07 · 1914 阅读 · 0 评论 -
COM 1
引用计数的原理: 引用计数就是用来管理对象生命期的一种计数。 对象O 可能同时被外界对象A,外界B,外界C引用,也就是说,外界A,外界B和外界C都可能在使用对象O。每次当对象被外界引用时,计数器就自增1;每次当外界对象不使用时,计数器就自减1。 在计数器值为0的时候,对象本身执行delete this,销毁自己的资源。引用计数使得对象通过计数能够知道何原创 2013-09-10 23:02:31 · 1084 阅读 · 0 评论 -
DLL中导出解析
这里有两种方法声明导出函数:一种是通过使用__declspec(dllexport),添加到需要导出的函数前,进行声明;另外一种就是通过模块定义文件(Module-Definition File即.DEF)来进行声明。 .dll中的_declspec(dllexport)语句是用来导出函数的,作用和.def文件中的EXPORTS的作用是一致的,都是用来从.dll文件中向外导原创 2013-10-11 10:41:51 · 1134 阅读 · 0 评论 -
DLL入门
静态库 函数和数据被编译进一个二进制文件(通常扩展名为.lib),在使用静态库的情况下,在编译连接可执行文件时,连接器从库中复制这些函数和数据并把他们和应用程序的其他模块组合起来创建最终的可执行文件。(.exe文件)【在release程序的时候,只需要release可执行文件,静态库已经生成到了可执行文件】动态库(只有导出的函数才能被使用) 在使用动态库的时候原创 2013-10-09 23:03:46 · 854 阅读 · 0 评论 -
DLL(1)
对于每个引出函数,使用extern "C"说明符,以及_stdcall修饰符。 C++中,为了使编制的DLL程序更加通用,一般指定DLL的引出函数使用_stdcall调用习惯,如果使用_cdecl调用习惯,则有些编程语言环境就不能使用这些DLL程序。C++编译器为DLL程序的每个引出函数生成了一个修饰名,这些修饰名对于不同的编译器并不兼容,因此从通用性的角度出发,我们在每个函数定义前原创 2013-10-09 15:45:04 · 803 阅读 · 0 评论 -
__declspec(dllexport)和__declspec(dllimport)
__declspec(dllexport) & __declspec(dllimport)__declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中 省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出转载 2013-10-09 15:52:12 · 578 阅读 · 0 评论 -
COM入门(3)
1. 注册TypeLibIDL在MIDL编译后会生成一个.tlb文件,这个文件包含TypeLibrary信息,为使我们写的COM组件供.NET或VB等程序调用,注册类型库是必须的。我们可以直接注册生成的tlb文件,但为了便于部署,可以将tlb文件作为资源嵌dll中。新建一个rc文件,添加如下代码:1 TypeLib "Debug\\BeginningCOM.tlb"这里的T转载 2013-10-08 10:00:39 · 860 阅读 · 0 评论 -
COM入门(2)
1. 实现COM组件的自注册和反注册实现COM组件的自注册和反注册,本质上就是写注册表与删注册表。需要在DLL中引出两个函数:DllRegisterServer和DllUnregisterServer,让这两个函数实现注册表操作。LPCTSTR RegTable[][3]= { {L"CLSID\\{586CDC7B-09F1-4f44-A110-F0E604AED转载 2013-10-08 10:00:44 · 773 阅读 · 0 评论 -
COM入门(4)
1. 实现IDispatch接口COM自动化是指实现了IDispatch接口,这样可以供VBScript,JScript能脚本调用。实现IDispatch接口的对象,对应到VBScript和JScript中的Object。IDispatch接口定义为:interface IDispatch : IUnknown{ HRESULT GetTypeInfoCou转载 2013-10-08 10:01:59 · 671 阅读 · 0 评论 -
MFC的DLL
MFC的DLL 一般的,在介绍Windows编程的书中讲述DLL的有关知识较多,而介绍MFC的书则比较少地提到。即使使用MFC来编写动态链接库,对于初步接触DLL的程序员来说,了解DLL的背景知识是必要的。另外,MFC提供了新的手段来帮助编写DLL程序。所以,本节先简洁的介绍有关概念。DLL的背景知识 静态链接和动态链接 当前链接的目标代码(.obj)如果引用了转载 2013-10-21 09:23:18 · 736 阅读 · 0 评论