- 1、本文档共41页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Com in plain C
COM in plain C[一] 原文:目录
o 一个COM对象和它的VTable
o GUID
o QueryInterface(),AddRef(),和Release()
o 一个IClassFactory对象
o 打包成dll
o 我们的C++/C包含文件
o 定义文件(DEF)
o 安装DLL,注册对象
o 一个C语言的例子
o 一个C++的例子
o 修改代码
o 下一步?
介绍
有大量例子说明如何使用和创建COM/OLE/ActiveX控件。但是这些例子典型的使用MFC,.NET,C#,WTL,至少是ATL,因为这些框架预制了一些样板文件。不信的是,这些框架也隐藏了许多底层细节,所以你从未真正的学习COM组件,而只是学习了如何使用一个顶层的框架。
如果试图使用C,而抛弃MFC,WTL,.NET,ATL,C#甚至是任何C++,那么你会发现很少有这方面的例子和资料。这个就是本篇文章所要说明的第一个系列。
在使用标准Win32控件如Static,Edit,Listbox,Combobox等时,你得到一个控件句柄(HWND)然后向它传递消息(通过SendMessage)为了操纵它。同样,控件也给你传递消息(比如把消息放到你的消息对列,你通过GetMessage去获得)当它想通知你一些事件或者给你一些数据。
这与OLE/COM对象不同。你不必传递消息。取而代之的是,COM对象给你一些函数指针你可以调用它们去操纵对象。例如,一个IE浏览器对象会给你一个函数指针使得你可以调用它来加载网页。一个Office对象会你一个函数指针你可以调用它来加载文档。如果一个COM对象需要通知你一些事件或向你传递数据,那么你可能需要写一些特定的函数,并向COM对象提供函数指针,使得它们可以调用这些函数当它们需要的时候。换句话来说,你需要创建你自己的COM对象。大多数在C方面的争议在于定义你自己的COM对象。为了完成这个,你需要知道关于COM对象的细节--就是大多数框架隐藏掉的,但是这里我们会阐述。
总结一下,你调用COM对象的函数来操纵它,它调用你的函数来通知你某些事件或者给你传递数据或与你的程序交互。这个机制调用DLL中的函数类似,DLL也可以调用你的函数--callback函数。但是与DLL不同的是,你不能使用LoadLibrary()和GetProcAddress()来获得COM中的函数,我们马上会发现,你会使用不同的操作系统函数得到一个对象的指针,然后使用那个对象来得到函数的指针。
一个COM对象和它的VTable
在我们学习如何使用COM对象,我们首先需要明白什么是COM对象,最好的方法是我们创建一个自己的COM对象。
在我们作之前,让我们看一下C struct结构,作为一个C程序员,你应该很熟悉struct,这里有个例子定义了一个简单的结构(IExample)包含两个成员
struct IExample {
DWORD count;
char buffer[80];
}
使用typedef来简化
typedef struct {
DWORD count;
char buffer[80];
} IExample;
这里有个例子分配结构空间,初始化成员:
IExample *example;
example = (IExample *)GlobalAlloc(GMEM_FIXED, sizeof (IExample));
example-count = 1;
example-buffer[0] = 0;
现在我们为结构添加函数指针
long SetString(char *str)
{
return (0);
}
long GetString(char *buffer, long length)
{
return (0);
}
typedef long SetStringPtr(char *);
typedef long GetStringPtr(char *, long);
typedef struct {
SetStringPtr *SetString;
GetStringPtr *GetString;
DWORD count;
char buffer[80];
} IExample;
初始化
example-SetStr
您可能关注的文档
- Chaper 10 国际支付与结算2011 第一部分1.ppt
- Chaper 12 Credit Analysis.ppt
- chaper 11 payment in international trade.ppt
- Chaper 1 A brief introduction.ppt
- Chaper 2 General Procedures of Export and Import Transaction 进.ppt
- chaper 14 进出口合同的履行.ppt
- Chaper 2 Foreign Exchange Risk and Why It Should Be Managed.ppt
- Chaper 25a test bank.doc
- chaper 2-7-3Enquiries.ppt
- cha solutions manual 11th ed.doc
最近下载
- 内蒙古鄂尔多斯准格尔经济开发区(大路产业园)区域性地震安全性评价报告.docx VIP
- 部编版六年级语文上册《夏天里的成长》课件.pptx
- 山西省2020年中考数学试题(Word版,含答案与解析).pdf VIP
- 长沙市雅礼中学2023-2024学年高二上学期期中考试物理试题及参考答案.pdf VIP
- 精品解析:山东省菏泽市2023-2024学年高二上学期11月期中化学试题(解析版).docx VIP
- 离婚协议书标准版下载[汇编].pdf
- 2023年山东省青岛西海岸新区自然资源局遴选劳务派遣人员69人笔试参考题库(共500题)答案详解版.docx
- 消融电极产品技术要求模板.docx
- YBT 6016-2022球墨铸铁管绿色工厂评价要求.pdf
- “双减”背景下家校共育的问题及策略.doc
文档评论(0)