看了 《com技术内幕》 理论是有了点,但却不知道如何下手自己写一个书上的前面几章例子是由dll实现的,我想用dll写一个简单的com,我用的是vs2005可是,我应该建立一个什么项目呢?我现在建了一个MFC DLL。不过它自己生成的时候里面就已经存在了一个类,如下:BEGIN_MESSAGE_MAP(CfirstComApp, CWinApp)
END_MESSAGE_MAP()
// CfirstComApp 构造CfirstComApp::CfirstComApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CfirstComApp 对象CfirstComApp theApp;
// CfirstComApp 初始化BOOL CfirstComApp::InitInstance()
{
CWinApp::InitInstance(); return TRUE;
}我不知道这个是干什么用的到底应该创建一个什么项目呢?这个MFC DLL又是干什么用的啊,里面的自动生成的东西又是干什么用的啊?是因为我的书太老了吧,很东西好像都不一样了,不能按书的步骤来了。很迷糊啊`~~
END_MESSAGE_MAP()
// CfirstComApp 构造CfirstComApp::CfirstComApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CfirstComApp 对象CfirstComApp theApp;
// CfirstComApp 初始化BOOL CfirstComApp::InitInstance()
{
CWinApp::InitInstance(); return TRUE;
}我不知道这个是干什么用的到底应该创建一个什么项目呢?这个MFC DLL又是干什么用的啊,里面的自动生成的东西又是干什么用的啊?是因为我的书太老了吧,很东西好像都不一样了,不能按书的步骤来了。很迷糊啊`~~
创建ATL Project。MFC DLL不一定就是COM或者干脆就win32 project吧。
在这个DLL中你导出DllGetClassObject
DllCanUnloadNow,DllRegister,DllUnRegister函数就可以了呀
然后你在运行进入cmd,然后使用rgsvr32 xxx.dll就可以在组册表中写入组件的信息了
通过调用CoCreateInstance函数传递进你的组件CLSID就可以使用这个组件了。
编写那几个几乎是一成不边的导出函数。
直接处理了接口的定义和组件的定义问题。
也可以开发普通的COM组件吗?
可以使用它来编写普通的COM组件的,其实使用COM的人只关心组件的
接口,对于组件的实现的任何细节都无须关心。但组件的编写人员必须提供
详细的接口文档,否则使用组件的人员没有相关文档即使拿到组件也没用,
建立一个新项目,include完了后写
#import "刚才生成的dll的地址" no_namespace
先编译下,在生成目录里面去找一个.tlh的文件,声明全在里面,下面有用
然后在函数中(只讲智能指针的)
{
::CoInitialize(NULL);
try{
I接口名Ptr = p随便起(__uuidof(实体类名));在tlh中找,一定要一致
p随便起->方法();
}
catch(_com_error e){
……
}
::CoUninitialize();
}记得try catch一定要有如果真的是超级新手的话,建议一上来先把上面这个玩转了再说吧,比生成和使用dll还方便。
等需要研究远调和同步什么什么的的时候在看大部头不迟。
个人观点,COM这玩意弄出来是服务于俺们的不是折磨俺们的。