在VC MFC和VB中如何调用COM?请具体一些,谢谢!
在线结帖。

解决方案 »

  1.   

    VC中调用不是一句话能说清的呀! 我也不太会,建议你找一个调用ms agent的程序看看VB中可能就是用CreateObject之类的东东吧
      

  2.   

    哇,这个问题恐怕讲几天都讲不完全。
    大概过程是通过128位的id(需要访问注册表),获得dll或exe 文件位置,再通过128位的接口id CogetClassObject()获得COM的接口,通过接口获得类似类的指针,再通过该指针访问功能函数。
    也可以不需要上述的动态访问,静态访问时大家都在同一程序中的ID可以自己定义。
    总之,你最好先看看例子。
      

  3.   

    你先要建立com组件,用atl就可以
    分为进程内、进程外、远程组件
    组件要先注册
    客户端调用相差不多。
    客户程序中调用com的例子,假设我们的组件可以取得操作系统的版本
    // Client.cpp 文件#include <windows.h>
    #include <stdio.h>
    // 加入comutil支持
    #include <comutil.h>
    #pragma comment( lib, "comsupp.lib" )// 包含com的定义文件,以下两个文件从step01(服务器代码)中拷贝出来
    #include "..\step01\step01.h"
    #include "..\step01\step01_i.c"void main()
    {
     ISimple01 * pISimple01=NULL;  // 我们定义的接口
     BSTR  bstrOS; // 初始化
     HRESULT hr = CoInitialize(NULL);
     if(FAILED(hr))
     {
      printf("Coinitialize failed! hr=0x%x", hr);
      return ;
     } // 创建COM对象
     hr = CoCreateInstance(CLSID_Simple01, NULL, CLSCTX_ALL,
                        IID_ISimple01, (void **)&pISimple01);
     if(FAILED(hr))
     {
      printf("create com failed! hr=0x%x", hr);
      CoUninitialize();
      return ;
     }
     // 获得操作系统
     hr = pISimple01->GetOSVersion(&bstrOS);
     if(FAILED(hr))
     {
      printf("pISimple01->GetOSVersion() failed! hr=0x%x", hr);
      pISimple01->Release();
      CoUninitialize();
      return ;
     }
     char *pszOS;
     pszOS = _com_util::ConvertBSTRToString(bstrOS); 
     printf("The OS is %s\n", pszOS); // 释放分配的内存
     SysFreeString(bstrOS);
     delete pszOS;
     pISimple01->Release();
     CoUninitialize(); return ;
    }
      

  4.   

    #pragma comment( lib, "comsupp.lib" )是什么意思?
    是不是一定要包含COM里的定义文件.h和.c之类的?
      

  5.   

    因为用到了 _com_util::ConvertBSTRToString(bstrOS);
    建议看书
      

  6.   

    如果我在VB中要用到该COM,那该怎么调用呢?