我是新手
请问各位在VC中有几种方法使用COM组件谢谢

解决方案 »

  1.   

    有两种,一种是直接加载该动态链接库(如果是进程外组件就不行),另一种是利用CoCreateFactory()创建。
      

  2.   


    直接加载的方法,其实是使用任何dll的方法。要知道com可以存在于exe中甚至远程计算机上。
    CoCreateInstance的方法比较常用。其实对于使用者来讲,很简单,知道头文件,也就知道哪些方法可用。
    1.创建com实例,相当于c++中创建一个类对象那样。当然有时要先创建类厂,然后才创建com组件实例。
    2.使用实例指针QueryInterface查询你所要的接口,这个接口就是一个函数指针数组
    3.调用接口中的某个函数实现你要的功能。就这样简单,除创建com组件的方法外,你完全认为自己在使用一个类
      

  3.   

    // method 1:
    IInterface* pInterface;
    HRESULT hResult = ::CoCreateInstance(CLSID, NULL, CLSCTX_INPROC_SERVER, IID, (void**)&pInterface);
    // ...
    pInterface->Release();// method 2:
    STDAPI CoGetClassObject(
      REFCLSID rclsid,  //CLSID associated with the class object
      DWORD dwClsContext,
                        //Context for running executable code
      COSERVERINFO * pServerInfo,
                        //Pointer to machine on which the object is to 
                        // be instantiated
      REFIID riid,      //Reference to the identifier of the interface
      LPVOID * ppv      //Address of output variable that receives the 
                        // interface pointer requested in riid
    );// method 3:
    ItfPtr pItf = NULL;
    HRESULT hResult = pConn.CreateInstance(const CLSID);
      

  4.   

    在vc中使用com比较麻烦。通常需要导入类型库(VC 会帮你生成包裹类),
    然后通过包裹类对com组件进行控制。
      

  5.   

    最方便的方法,就是引入.tlh,自动生成包装类,
    跟vb里一样简单!推荐使用这个吧
      

  6.   

    还有使用进程外组件,封装在EXE里.在VC中也像类(导入类型库)一样使用.
      

  7.   


    #import ....dll 好象很复杂 里面的NAMESPACE 是什么意思如果不用#import 
    还有其他什么方法谢谢了对了
    请各位告诉我怎么结贴 给分