描述:
在VC MFC和VB中如何调用COM?请具体一些,谢谢!
在线结帖。
解决方案1:
你先要建立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 ;
}
哇,这个问题恐怕讲几天都讲不完全。
大概过程是通过128位的id(需要访问注册表),获得dll或exe 文件位置,再通过128位的接口id CogetClassObject()获得COM的接口,通过接口获得类似类的指针,再通过该指针访问功能函数。
也可以不需要上述的动态访问,静态访问时大家都在同一程序中的ID可以自己定义。
总之,你最好先看看例子。
VC中调用不是一句话能说清的呀! 我也不太会,建议你找一个调用ms agent的程序看看
VB中可能就是用CreateObject之类的东东吧