如何调用COM? 在VC MFC和VB中如何调用COM?请具体一些,谢谢!在线结帖。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VC中调用不是一句话能说清的呀! 我也不太会,建议你找一个调用ms agent的程序看看VB中可能就是用CreateObject之类的东东吧 哇,这个问题恐怕讲几天都讲不完全。大概过程是通过128位的id(需要访问注册表),获得dll或exe 文件位置,再通过128位的接口id CogetClassObject()获得COM的接口,通过接口获得类似类的指针,再通过该指针访问功能函数。也可以不需要上述的动态访问,静态访问时大家都在同一程序中的ID可以自己定义。总之,你最好先看看例子。 你先要建立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 ;} #pragma comment( lib, "comsupp.lib" )是什么意思?是不是一定要包含COM里的定义文件.h和.c之类的? 因为用到了 _com_util::ConvertBSTRToString(bstrOS);建议看书 如果我在VB中要用到该COM,那该怎么调用呢? 急求关于P2P通信协议的选择问题? 利用MFC生产多文档程序后,怎么给子窗体添加菜单啊 webbrowser控件编程如何从网页javascript脚本函数中获取数据? 关于文件扩展名 控件接口问题 C Runtime Library和API函数? 链表问题,在线等待 问题求助?关于一个从CStatic继承的类,在线等待...... 初学者问:怎么样设置才能看到Trace宏输出的信息? Create Virtual Disk in Memory 请教高手 自动编号 请教
大概过程是通过128位的id(需要访问注册表),获得dll或exe 文件位置,再通过128位的接口id CogetClassObject()获得COM的接口,通过接口获得类似类的指针,再通过该指针访问功能函数。
也可以不需要上述的动态访问,静态访问时大家都在同一程序中的ID可以自己定义。
总之,你最好先看看例子。
分为进程内、进程外、远程组件
组件要先注册
客户端调用相差不多。
客户程序中调用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 ;
}
是不是一定要包含COM里的定义文件.h和.c之类的?
建议看书