使用ATL设计组件(VC6.0)
来源:互联网 发布:sql高级统计查询语句 编辑:程序博客网 时间:2024/05/22 03:49
使用ATL设计组件(VC6.0)
fangyukuan
2007年11月30日
ATL(ActiveX Tempelate Library)使用基于模板的方法充分地对COM进行了支持。通过对ATL所提供的模板的继承,可以直接获得IUnknown、IDispatch、IClassFactory和组件所需的其他实现,从而通过加入自己所需的各种COM功能的片段来完成组件的设计。
ATL对COM的支持
ATL对COM的原始支持是从对Iunknown的支持开始的,如下。创建一个名称为kuan的组件时,由Visual C++的ATL向导生成的代码:
Kuan.h
// Ckuan
class ATL_NO_VTABLE Ckuan :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<Ckuan, &CLSID_kuan>,
public IDispatchImpl<Ikuan, &IID_Ikuan, &LIBID_ATLLib>
{
public:
Ckuan()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_KUAN)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(Ckuan)
COM_INTERFACE_ENTRY(Ikuan)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
}
// Ikuan
CcomObjectRootEx中实现了对Iunknown的支持
CcomCoClass中实现了对类工厂的支持,
IDispatchImpl中实现了对Idispatch的支持。
IDL文件。
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(ECD09E84-BE5E-4F5D-AA66-95760E4072F0),
dual,
helpstring("Ikuan Interface"),
pointer_default(unique)
]
interface Ikuan : IDispatch
{
[id(1), helpstring("method AddNumbers")] HRESULT AddNumbers(long Num1, long Num2, long *ReturnVal);
};
[
uuid(848E12F3-D5C3-469D-8993-1859160117B2),
version(1.0),
helpstring("使用ATL设计组件 1.0 Type Library")
]
library ATLLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(27393093-83B4-41AA-AA2E-B40978F1EC67),
helpstring("kuan Class")
]
coclass kuan
{
[default] interface Ikuan;
};
};
使用ATL设计组件的步骤和方法
以下例子工程名以及路径用中文命名,最好不要这样,由于例子是我几年前开始接触的时候写的,现在就不重新做例子了。
例:
1创建一个组件工程。ATL COM AppWizard。
2插入对象。Insert| New ATL Object在弹出的ATL Object Wizard对话框中的Short Name填写kuan
3在接口中加入方法。
4实现方法:
STDMETHODIMPCkuan::AddNumbers(longNum1, long Num2, long *ReturnVal)
{
// TODO: Add your implementation code here
*ReturnVal=Num1+Num2;
return S_OK;
}
5.Tools|RegisterControl选项,注册该组件。
6编写一个测试程序:
#include<iostream.h>
#include"..\使用ATL设计组件\使用ATL设计组件.h"
#include"..\使用ATL设计组件\使用ATL设计组件_i.c"
voidmain(void)
{
//声明HRESULT和Ikuan接口指针
Ikuan * IkuanATL = NULL;
HRESULT hr = CoInitialize(NULL); //初始化COM
//使用SUCCEEDED宏并检查我们是否能得到一个接口指针
if(SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_kuan,
NULL,
CLSCTX_INPROC_SERVER,
IID_Ikuan,
(void **)&IkuanATL);
//如果成功,则调用AddNumbers方法,否则显示相应的出错信息
if(SUCCEEDED(hr))
{
long ReturnValue;
IkuanATL->AddNumbers(8,9,&ReturnValue);
cout << "The answer for 8+9 is:" << ReturnValue <<endl;
IkuanATL->Release();
}
else
{
cout << "CoCreateInstance Failed." << endl;
}
}
CoUninitialize();//释放COM
}
本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/04/09/1708633.html
- 使用ATL设计组件(VC6.0)
- 使用ATL设计组件(VC6.0)
- 使用ATL设计组件
- 使用ATL设计组件(vs2008)
- 使用ATL设计组件(vs2008)
- 使用ATL设计组件(vs2008)
- 使用ATL设计组件(vs2008)
- COM组件设计与应用之VC6中用ATL写组件
- COM组件设计与应用之VC6中用ATL写组件
- COM组件设计与应用之VC6中用ATL写组件
- COM组件设计与应用15 - 连接点(vc6.0)
- vc6 0 atl工程开发的com组件输出事件到VB,VB接收不到中件响应
- vc6中使用com组件
- atl 组件应用程序使用的注意事项
- 使用ATL开发简单COM组件(1)
- ATL 组件的使用(vs2008)
- 使用ATL进行com组件的开发
- ATL(VC6)编程初级教程
- 使用ATL设计组件(vs2008)
- android 的反编译
- mfc深入浅出 系列 深入浅出mfc 第13章多重文件与多重显示
- Linux 动态库剖析
- keytool生成私钥、公钥、证书详解
- 使用ATL设计组件(VC6.0)
- Eclipse Debug不为人知的秘密
- cinder中的task
- 制作支付宝博客捐款页面
- Maven学习笔记之maven的聚合和继承问题
- ZOJ 3610 (The 9th Zhejiang Provincial Collegiate Programming Contest k)
- linux下vi编辑器命令入门
- C语言同时向不同的文件写入不同的数据
- C语言中存储标志(flag)效率最高的方法