0.ATL与COM之间的关系
这个讲的很清晰
BSTR bstr = NULL;
wstring wstrName(bstr); //会有异常,不允许使用空指针初始化
1.使用ATL创建COM
1.1 其中对调用COM的方法做下说明:
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(OLESTR("AtlCom.math.1"),&clsid);
CComPtr<IAtlCom> pFirstClass;// 这里的IAtlCom是按照例子中添加的自定义接口,不需要引入头文件
HRESULT hr = pFirstClass.CoCreateInstance(clsid); //可能要手动注册下COM
pFirstClass->HelloWorld();
long ret = pFirstClass->AddTest(100, 500);
//printf("%d\n",ret);
pFirstClass.Release();
CoUninitialize();
1.2 可以在一个COM工程中添加多个ATL简单对象
注意ProgID要对应添加类时的ID: CLSIDFromProgID(OLESTR("AtlCom.math.1"),&clsid);
1.3 组件中添加多个自定义接口
注意: 要选择自定义接口
直接在.idl文件中添加接口定义
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(80D8C98B-C70F-4340-9ADD-52901695A9C3),
pointer_default(unique)
]
interface IMyFCom : IUnknown{
[] HRESULT HelloWorld(void);
};
[
uuid(06BD93DE-113D-417E-9D43-7534CF5ED68F),
version(1.0),
]
//新添加的接口
interface IMySCom : IUnknown{
};
[
uuid(A0E430E2-70F1-4959-963A-C5FE194888E8),
version(1.0),
]
library MyFComLib
{
importlib("stdole2.tlb");
[
uuid(128A3243-0970-47AF-8F8B-D97B3931CE70)
]
coclass MyFCom
{
[default] interface IMyFCom;
interface IMySCom; //在简单对象中添加接口实现
};
};BEGIN_COM_MAP(CMyFCom)
COM_INTERFACE_ENTRY(IMyFCom)
COM_INTERFACE_ENTRY(IMySCom)
END_COM_MAP()class ATL_NO_VTABLE CMyFCom :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyFCom, &CLSID_MyFCom>,
public IMySCom, //实现接口
public IMyFCom
{
然后你就可以在自定义接口中添加方法了