• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何调用COM?

如何调用COM?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 如何调用COM?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何调用COM?
描述:

在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 ;
}

解决方案2:

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

解决方案3:

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-05 求助!!怎样让注册表修改后立即起作用
  • 2017-06-04 VC写入EXCEL单元格中带有下标的数据
  • 2017-06-05 请问动态连接库可以导出模板类吗
  • 2017-06-04 ATL中的全局函数怎样访问实现类的成员函数?
  • 2017-06-05 画圆,在2000/xp下编译就能显示,而在98下编译不能显示圆
  • 2017-06-04 开发com需要解决的一个问题,怎么在服务器程序中实现一个共享数据,并且在接口中实现调用
  • 2017-06-04 WTL对话框切换问题
  • 2017-06-05 如何封装Win32DLL?
  • 2017-06-05 用vc实现创建VBA宏指定快捷键间接实现屏蔽word快捷键功能
  • 2017-06-04 com组件能不能引出继承来的父接口?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 300分求对话框的多线程问题,在线等待,17点前结贴
    • 如何获得多个Excel实例的接口???
    • mfc写的activex控件,比如画一个圆,这个控件可以在aspnet中用吗
    • 有人在XP下,远程调用DCOM服务成功的案例吗?
    • 如何在pb中实现多线程?
    • 哪位大侠自定义的浏览器,怎么实现没有任何安全提示就能下载和运行非安全控件
    • idl中结构体共用的问题,大虾们帮帮忙
    • 在主程序中用ShellExecute打开新进程,如何在主程序中判断新进程被关闭。急急急
    • 菜鸟提问,希望有人给与帮助,谢谢
    • HOG特征值在计算时总出现0xC0000005:写入位置0x032FBA00时发生访问冲突。

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有