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
 {

然后你就可以在自定义接口中添加方法了