使用VC6.0开发COM组件 - 傻瓜式,不讲理论,只讲实例
1.创建一个ATL COM AppWizard工程,如图:
2. 选择 Dynamic link Library (DLL),其它两个请百度,或参照其它文档。如下图:
3. 添加一个自己的COM类,用于导出需要用到的接口。步骤如下:
选择类视图->右键工程->新建类(New Class) 如下图:
弹出对话框后,选择 ATL CLASS,输入类名,如下图:
然后,在类视图中,你会看到:
多了一个接口和一个类,这都是你刚才添加的。
4. 添加导出接口。
右键 "IHelloWorld"->AddMethod,如下图:
弹出对话框,填写函数名及参数即可,如下图:
然后,我们再看 IHelloWord, 如下图:
接口已经有了,而且它已经自动在 CHellowWorld 类中加了实现代码,双击这个上图中的选中的Show就会跳转到定义,如下图:
作为示例,我们弹出一个消息框好了,代码如下:
STDMETHODIMP CHellowWorld::Show(int iWhat)
{
// TODO: Add your implementation code here
TCHAR szMsg [512] = {0};
sprintf(szMsg, "Hello World - iWhat:%d", iWhat);
MessageBox (NULL, szMsg, "First Com Project", MB_OK | MB_TOPMOST);
return S_OK;
}
到这里,我们编译生成一下。
5. 注册COM组件,可以使用命令行进行注册,regsrv32 xxx.dll,不过为了方便,我们不准备使用手工,我们可以在链接完成后直接注册,设置工程,设置如下:
6.编写调用例程。
创建一个控制台项目,项目源码如下:
#include "stdafx.h"
#include "../ComDemo.h"
#include "../ComDemo_i.c" int main(int argc, char* argv[])
{
CoInitialize(NULL);
IHellowWorld* pHello = NULL;
IUnknown * pUnk = NULL;
HRESULT hr;
//(2)创建实例对象,获取IUnknown接口指针
hr = ::CoCreateInstance(
CLSID_HellowWorld,
NULL,
CLSCTX_INPROC_SERVER, // 以进程内组件 DLL 方式加载
IID_IUnknown, // 想取得 IUnknown 接口指针
(LPVOID *) &pUnk);
if( FAILED( hr ) )
{
printf("没注册吧\n");
return -1;
} hr=pUnk->QueryInterface(IID_IHellowWorld,(LPVOID *)&pHello);
if (FAILED (hr)) {
printf("QueryInterface hello2 失败\n");
return -1;
}
pHello->Show (2);
CoUninitialize();
return 0;
}
其中的 ComDemo.h 和 ComDemo_i.c,请看一下COM组件的文件视图,截图如下:
然后运行一下就可以看到效果了。
使用VC6.0开发COM组件 - 傻瓜式,不讲理论,只讲实例的更多相关文章
- 如何在Delphi中调用VC6.0开发的COM
上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过. ...
- VC6.0开发OCX按钮控件
原文:http://www.cnblogs.com/joinclear/archive/2013/05/21/3091934.html 0前言 1.OCX是典型的ActiveX控件,常见的OCX控件有 ...
- VC6.0 开发 64 位程序
1. 设置平台SDK(如:Microsoft platform sdk 2003),选择64位的编译.链接环境. setenv /XP64 /DEBUG 2. 利用这个环境启动VC6.0. msdev ...
- iOS开发雕虫小技之傻瓜式定位神器-超简单方式解决iOS后台定时定位
1.概述 由于公司一款产品的需求,最近一直在研究iOS设备的后台定位.主要的难点就是,当系统进入后台之后,程序会被挂起,届时定时器.以及代码都不会Run~ 所以一旦用户将我的App先换到了后台,我的定 ...
- VC6.0开发中一些链接错误的解决方法
(1)error LNK2001: unresolved external symbol _main 编号:LNK2001 直译:未解决的外部符号:_main. 错误分析:缺少main函数.看看mai ...
- 安装VC6.0遇到的问题
1. 问题现象 安装VC6.0后,又安装了VS2005.用VC6.0打开以前的.dsw文件时,程序自动关闭.如下图所示. 具体操作是:选择一个.dsw文件,右键菜单[打开方式]中选择[Microsof ...
- [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
[翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...
- 在VC6.0下如何调用Delphi5.0开发的进程内COM
因为本人的语言水平很差,考大学时150的总分,我考了个60分.外语也是,初中及格过一次,会考及格过一次.其它的时间好像从没有及格过.所以我不写文章,因我一百字的文章给我写,至少要出八九个错别字.哈哈… ...
- SNF快速开发平台MVC-瀑布式分页组件
1. 瀑布式分页 目前已经比较流行了,以往的这种点击分页已经不能满足广大网民的需求了.像百度图片等等,网站都有滚动滚轮直接分页的功能,这样体验也确实好了不少,所以我们也决定在我们的框架内进行集成此 ...
随机推荐
- WIN7 32运行提示无法定位api-ms-win-crt-heap-l1-1-0.dll解决方法
WIN7 32位无法运行adbapi-ms-win-crt-heap-l1-1-0.dll运行ADB ,提示无法定位api-ms-win-crt-heap-l1-1-0.dll需要安装https:// ...
- java集合(2)-Collection与Iterator接口
1 package com.j1803.collectionOfIterator; 2 import java.util.ArrayList; 3 import java.util.Collectio ...
- 记录Jackson和Lombok的坑
记录Jackson和Lombok的坑 今天遇到Jackson反序列化json缺少了字段,后来研究下发现是Jackson的机制和Lombok生成的setter不一致,导致没有正确调用setter. 复现 ...
- Windows内核驱动--实现修改线程优先级demo
在User下修改优先级比较麻烦,该驱动可以直接用线程ID,和优先级级数两个参数直接修改线程的优先级: Client代码: #include <Windows.h> #include < ...
- 记一次系统崩溃事件【Mac版】
事件:Mac系统崩溃,导致电脑数据丢失,以及数据安全备份措施的不到位的教训! 解决措施: 1.开机后按:Command+R 按开机键 ,进入Mac 实用工具, 选择磁盘工具.由于没有备份直接抹掉磁盘. ...
- odoo中Controller
一:Controller 一般通过继承的形式来创建controller类,继承自odoo.http.Controller. 以route装饰器来装饰定义的方法,提供url路由访问路径: class M ...
- Python基础之创建文件夹与删除文件夹。
参考链接:https://blog.csdn.net/weixin_43826242/article/details/87101436 创建目录结构 # 创建文件目录结构 def create_fol ...
- 在Python中执行普通除法
如果希望Python只执行普通的除法,那么可以在程序前加上以下语句: 1 from _future_ import division 如果通过命令行(比如在Linux系统上)运行Python,可以使用 ...
- IDEA输出乱码“淇℃伅”
尝试过在IDEA中tomcat的vmoptions中加入代码 -Dfile.encoding=GBK 没什么用 最后找到了这个方法 参考链接 ①在Tomcat文件夹下找到conf ②找到logging ...
- CF877B Nikita and string TJ
前言的前言 本 TJ 同步发布于洛谷,在线求赞(bushi 前言 蒟蒻第一篇题解,在线求审核大大给过 awa. 如果此题解有什么问题的话欢迎各位大巨佬提出. 题目链接:CF877B 题目类型:dp,一 ...