两种模式, 假设你的COM是test.dll
1. 使用头文件模式
2. 使用智能指针#import "test.dll"创建组件实例一般就是CoCreateInstance( CLSID_XXXX, IID_XXXX, CLCTX_INPROC_SERVER, (void**)&pTest );
具体看你的接口了

解决方案 »

  1.   

    这是IDL文件:// MyAXDll.idl : IDL source for MyAXDll.dll
    //// This file will be processed by the MIDL tool to
    // produce the type library (MyAXDll.tlb) and marshalling code.import "oaidl.idl";
    import "ocidl.idl";
    [
    object,
    uuid(A17D7023-06B9-4E88-902B-0BA12A4CB5A9),
    dual,
    helpstring("IComTest Interface"),
    pointer_default(unique)
    ]
    interface IComTest : IDispatch
    {
    [id(1), helpstring("method SetComTest")] HRESULT SetComTest([in]BSTR  strOK,[out]BSTR*  strBack);
    };[
    uuid(FF5DD3BF-4B48-4F19-9A0C-5CEEB5B19799),
    version(1.0),
    helpstring("MyAXDll 1.0 Type Library")
    ]
    library MYAXDLLLib
    {
    importlib("stdole32.tlb");
    importlib("stdole2.tlb"); [
    uuid(E3161C27-7736-49CD-B0D5-8E4047474206),
    helpstring("ComTest Class")
    ]
    coclass ComTest
    {
    [default] interface IComTest;
    };
    };
      

  2.   

    ATL作了以后注册,然后在新的项目里加入控件
    project->add project
      

  3.   

    讨论利用头文件的情况
    首先包含进头文件
    一般为:MyAXDll.h和MyAXDll_i.c两个文件
    在MyAXDll_i.c文件中定义了一下接口:
    IID_IComTest 和 CLSID_ComTest如在MFC中调用,只需用到以下代码就可以了
    ......
    IComTest* pIComTest = 0;
    CoInitialize(0);
    CoCreateInstance(CLSID_ComTest,0,CLSCTX_ALL,IID_IComTest,(void**)&pIComTest);
    //得到IComTest接口的指针后你就可以调用该接口暴露的方法了!
    //如调用SetComTest方法:
    BSTR bstrIn = SysAllocString(L"Hi,Im Jack,Good Jack");
    BSTR bstrOut = 0;
    pIComTest->SetComTest(bstrIn, &bstrOut);
    //That's Okay :)
    CoUninitialize();
    ......
      

  4.   

    下面是偶在C++控制台测试ATL组件用的部分
    包含头文件形式.#include <initguid.h>
    #include "..\VSSDesign\VSSDesign_i.c" //同目录下组件的源文件
    #include "..\VSSDesign\VSSDesign.h"   //// For ATL's variant support
    #include <atlbase.h>int main(int argc, char* argv[])
    {
           cout << "Initializing COM" << endl;   if ( FAILED( CoInitialize( NULL )))
       {
          cout << "Unable to initialize COM" << endl;
          return -1;
       }   // Create the math component and return IUnknown
       IUnknown* pUnk;
       HRESULT hr = CoCreateInstance( CLSID_Design, //组件的CLASSID
                            NULL,
                            CLSCTX_SERVER,
                            IID_IUnknown,
                            (void**) &pUnk );
       if ( FAILED( hr ))
       {
          cout.setf( ios::hex, ios::basefield );
          cout << "Failed to create server instance. HR = " << hr << endl;
          CoUninitialize();
          return -1;
       }   cout << "Instance created" << endl;//后面用对象调用方法  CoUninitialize();}