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的各种方式调用另外写文档。