简单的ATL COM组件

1.      新建->【ATL项目】->【动态链接库】。在dllmain.h中可以看到该dll的注册CLSID。

DECLARE_REGISTRY_APPID_RESOURCEID(IDR_ATL_PROJECT, "{4575288C-5913-4A12-A1C3-28FB61DB86FE}")


2.      【添加】->【类】->【ATL简单对象】。新增CoClass  [CMathModule] 和 [CStringModule]。

在atl_project_i.h中可以看到这两个对象的CLSID。


EXTERN_C const IID LIBID_atl_projectLib;

 

EXTERN_C const CLSID CLSID_CMathModule;

 

#ifdef __cplusplus

 

class DECLSPEC_UUID("64E8A69A-5815-4137-AD4A-C86F0717D8CF")

CMathModule;

#endif

 

EXTERN_C const CLSID CLSID_CStringModule;

 

#ifdef __cplusplus

 

class DECLSPEC_UUID("C4E98946-B075-4C69-83BB-79C95FE5E00F")

CStringModule;

#endif

3.  给ICStringModule添加方法。

 

包含CString头文件:#include <atlstr.h>

参数属性:[out,retval] BSTR* pStrFilePath

注意:不要用Getbuffer,而应该用AllocSysString函数,前者返回的只能在VC是正确的,到了js有时不正确(字符串有时会被截断)

 

STDMETHODIMP CCStringModule::GetFilePath(BSTR* pStrFilePath)

{

    // TODO: 在此添加实现代码

 

    CString strFilePath = _T("c:\\1.TXT");

    *pStrFilePath= strFilePath.AllocSysString();// 不要用strFilePath.GetBuffer();

 

    return S_OK;

}

4.      给ICMathModule添加方法。

参数属性:[in] DOUBLE dNumber1, [in] DOUBLE dNumber2,[out] DOUBLE*pNumber3


STDMETHODIMP CCMathModule::DoAdd(DOUBLE dNumber1,DOUBLE dNumber2,DOUBLE* pNumber3)

{

// TODO: 在此添加实现代码

 

*pNumber3 = dNumber1 + dNumber2;

 

return S_OK;

}

5.      编译生成dll文件并注册。在注册表中查看注册信息。

 

HKEY_CLASSES_ROOT\CLSID\{64E8A69A-5815-4137-AD4A-C86F0717D8CF }

HKEY_CLASSES_ROOT\CLSID\{C4E98946-B075-4C69-83BB-79C95FE5E00F}

 

    注册成功。关于COM的各种方式调用另外写文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值