- 浏览: 1010847 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
下载例子代码 |
本文的对象是COM编程初学者,其目的旨在描述如何用ATL创建COM服务器,以及如何在VC或VB编写的客户端应用程序中调用COM服务器。为了不给初
学者增加负担,本文不打算深入讨论COM和IDL的细节,而是展示用ATL创建简单的COM对象所需要的步骤。希望通过这篇文章能刺激你学习COM编程的
欲望。 第一步:运行ATL COM向导(参见图一) 你要做的第一件事情是启动VC创建一个新的工程。选择“ATL COM AppWizard”。注意这个向导创建的工程并没有包含任何初始的COM对象,在完成这个向导之后,要从“ClassView”中用“New ATL Object”命令来指定你想要增加到这个工程中的对象类型。 在“Project name”编辑框中为工程取个名字:“Simple_ATL”。在“Location”编辑框中指定工程的存放位置,如“E:\samples\Simple_ATL”,然后单击OK按钮。 |
(图一) |
你会看到一个选择屏幕(图二)。 |
(图二) |
第一部分单选按钮选项是要创建的服务器类型 “Server Type”。因为我们要创建一个进程内服务器(Server DLL),所以应该选择的类型是动态链接库“Dynamic Link Library——DLL”,注意所有进程内服务器都是DLL。下面是三个复选框不用去管它,它和我们创建的这个工程没关系。单击“Finish”按钮。 向导将自动产生相应的文件。然后出现“New Project Information”窗口告诉你向导将要创建一些什么文件(图三)。确认后单击OK按钮。 |
(图三) |
第二步:创建新的ATL对象 确定在VC的IDE环境中见到“Workspace View”。也就是工作间视图。你也可以进入“View”菜单,然后选择“Workspace”。这个视图中由三个标签,单击“ClassView”标 签。你会看到其中的“Simple_ATL Classes”。选中后单击右键并从弹出菜单中选择“New ATL Object”。你会见到如下窗口:(图四) |
(图四) |
我们就用缺省选择(Simple Object),也就是简单对象。单击“Next”按钮进入“ATL Object Wizard Properties”,也就是ATL对象向导的属性对话框(图五)。 |
(图五) |
在“Short
Name”文本编辑框中输入“First_ATL”。注意向导会自动填写其余的文本编辑框。单击“Attributes”标签。其中有几组单选按钮选项和
几个复选框。第一组单选按钮是线程模型“Threading Model”,我们取缺省值“Apartment
Model”。第二组单选按钮是接口“Interface”,单击“Dual”,也就是双接口。最后,第三组单选按钮是聚合“Aggregation”,
因为我们不想涉及接口的聚合,所以在此选择“No”。至于底下的三个复选框,我们不用管它,单击OK按钮让向导创建新的“ATL Simple
Object” 第三步:添加方法 如果你单击工作间的“ClassView”标签,你会注意到向导在里面添加了一些内容。添加一个方法很容易,(图六)选中“IFirst_ATL”后单击右键并选择“Add Method”。 |
(图六) |
单击“Add Method”后,你会看到“Add Method to Interface”对话框(图七)。 |
(图七) |
在“Return
Type”编辑框中(已成灰色)这个方法的返回值已经缺省为
“HRESULT”。大多数情况下都应该是这个值类型。下一个编辑框是方法名“Method
Name”,输入方法名“AddNumbers”。最后一个编辑框是要你输入希望使用的参数“Parameters”。由于我们打算将两个数字相加,然后
返回相加结果,所以要使用三个参数。最后一个参数是一个指针。现在你不用去关心繁杂的接口定义语言IDL,只要在这个参数编辑框中输入如下内容: [in] long Num1, [in] long Num2, [out] long *ReturnVal 它的意思是声明两个long类型输入[in]参数和一个指针返回值[out](刚开始可能会不习惯这样怪怪的写法,但等你阅读了一两本关于COM的书之 后,会慢慢接收它的)。单击OK按钮。展开所有“ClassView”的节点“+”号。从这个视图可以清楚地了解Simple_ATL各个类之间的层次关 系。双击最上面“IFirst_ATL”(接口)节点下的“AddNumbers”(方法)节点,右边屏幕将会显示这个方法的实现代码。添加如下的代码: STDMETHODIMP CFirst_ATL::AddNumbers(long Num1, long Num2, long *ReturnVal) { // TODO: Add your implementation code here *ReturnVal = Num1 + Num2; return S_OK; } 第四步:编译这个DLL 不管你想不相信,到目前为止,我们用ATL所创建的COM服务器已经完全能运行!当然,还需要编译它才行。按下“F7”功能键,几秒钟之后,VC++便会完成编译并注册你所创建的DLL服务器。这样其它的应用程序就可以使用这个COM服务器了。试一试吧! 第五步:用VB测试这个服务器 为了用VB来测试COM服务器,首先你必须安装VB的开发环境。(如果你没有安装VB或不想用VB测试,可以跳过这一步到下一步:用VC++测试COM服 务器。)首先启动VB,选择创建标准EXE“Standard EXE”工程。在对话框中放一个按钮。然后我们要引用COM服务器。单击“Project”菜单并选择“References”。然后下翻页直到可以看见 “Simple ATL 1.0 Type Library”(如图八),然后选中它。 |
(图八) |
单击OK按钮。现在双击前面在对话框中创建的命令按钮,VB将会带你到这个按钮的代码窗口。然后添加以下代码: Private Sub Command1_Click() Dim objTestATL As SIMPLE_ATLLib.First_ATL Set objTestATL = New First_ATL Dim lngReturnValue As Long objTestATL.AddNumbers 5, 7, lngReturnValue MsgBox "The value of 5 + 7 is: " & lngReturnValue Set objTestATL = Nothing End Sub 如果你是个VB程序员,这对你来说简直太容易了。声明变量和对象,调用COM服务器的“AddNumbers”方法,然后显示结果。按下“F5”功能键运行这个VB工程,单击对话框中的命令按钮,你会看到输出的结果。(如图九) |
(图九) |
下面再让我们用VC++测试这个COM服务器。 第六步:用VC测试这个服务器 保存并关闭Simple_ATL工程,然后创建一个新的Win32 控制台应用程序。选择“Win32 Console Application”并取名为“Test_ATL”。单击OK按钮并接受对话框中的缺省设置(空的工程)。单击“Finish”按钮,然后再按OK按 钮。这样就创建好了一个空的工程。按下“Control+N”键向工程中添加一个文件。从弹出的窗口中选择“C++ Source File”并为它取名为“Test_ATL.cpp”。按下OK按钮。这样工程中就有了一个空的.CPP文件。我们要在这个文件中添加一些测试COM服务 器的代码: // 将头文件的目录指到Simple_ATL工程所在的目录 #include "..\Simple_ATL\Simple_ATL.h" #include // 从Simple_ATL 工程所在目录的Simple_ATL_i.c 文件中拷贝以下内容 // 注意: 你也可以不拷贝这些东西,而是把文件Simple_ATL_i.c包含进来。 // 我之所以将它拷进来,是想更清楚地展示这些敞亮来自什么地方一击它们的代码 const IID IID_IFirst_ATL = {0xC8F6E230,0x2672,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}}; const CLSID CLSID_First_ATL = {0x970599E0,0x2673,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}}; void main(void) { // 声明HRESULT和Simple_ATL接口指针 HRESULT hr; IFirst_ATL *IFirstATL = NULL; // 初始化COM hr = CoInitialize(0); // 使用SUCCEEDED 宏并检查我们是否能得到一个接口指针 if(SUCCEEDED(hr)) { hr = CoCreateInstance( CLSID_First_ATL, NULL, CLSCTX_INPROC_SERVER, IID_IFirst_ATL, (void**) &IFirstATL); // 如果成功,则调用AddNumbers方法,否则显示相应的出错信息 if(SUCCEEDED(hr)) { long ReturnValue; IFirstATL->AddNumbers(5, 7, &ReturnValue); cout << "The answer for 5 + 7 is: " << ReturnValue << endl; IFirstATL->Release(); } else { cout << "CoCreateInstance Failed." << endl; } } // 释放COM CoUninitialize(); } 第七步:编译并运行测试程序 按下“F5”功能键,编译测试程序,然后按“Control+F5”功能组合键运行测试程序。在DOS窗口中,你应该能看到输出的结果。 |
发表评论
-
NotePad++ - 安装和配置C/C++开发插件
2011-11-15 23:00 1831NotePad++ - 安装和配置C/C+ ... -
VC中使用ATL编写控件 【转】
2011-10-21 15:23 2141VC中使用ATL编写控件 作者:邵盛松 2010 ... -
在Windows环境下MongoDB搭建和简单操作【转】
2011-10-21 12:37 989一,安装mongoDB 1,解 ... -
Mongodb在Windows下安装及配置【转】
2011-10-21 12:35 5851.下载mongodb的windows版本,有32位和64位版 ... -
一篇介绍VC开发OCX的文章[转]
2011-10-20 17:57 1920转自“http://www.cnblogs.com/genga ... -
使你的ActiveX控件执行时不弹出安全性提示 (转载)
2011-10-20 17:56 1206使你的ActiveX控件执行时不弹出安全性提示 2010-0 ... -
VC++ 的MFC 和ATL 及COM 是什么?
2011-10-20 01:12 1019一、什么是MFC 微软基础类(Micro ... -
使用VC++6.0制作ASP服务器控件简介[转]
2011-10-20 01:10 701用ASP写网页的程序 员,一定对VBSript语句“Set ... -
基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql
2011-09-01 13:49 1569基于CentOS 5.4搭建nginx+php+sp ... -
解决mrtg的Use of uninitialized value in hash element at /usr/bin/indexmaker line 35
2011-09-01 13:41 2336mrtg的安装过程这里就不再阐述,随便搜索一下。使用ind ... -
用MRTG检测Linux网络性能
2011-09-01 10:49 907随着Linux应用的日益广泛,有大量的网络服务器使用Linux ... -
Linux安装配置maven3.0以及搭建nexus私服
2011-08-30 23:45 1660一、软件准备 1、apache-maven-3.0-b ... -
GraphicsMagick介绍及安装
2011-08-30 23:16 1561作者:Cocowool 来源:博客园 发布时 ... -
Makefile
2011-08-30 22:10 897CC = g++ CFLAG = -Wall -g -w ... -
高位字节优先 低位字节优先
2011-08-24 17:30 1203自第一台计算机诞生, ... -
C++方式的文件操作
2011-08-24 16:05 1847本文主要讨论C++标准I/O库,主要内容为控制台输入输出流 ... -
【JAVA实用工具】JNA-通过它调用C++的方法,比JNI方便很多访问网站需要代理,所以把它COPY出来备忘
2011-08-24 00:33 3199How To Get Started Using JN ... -
Jni中C++和Java的参数传递
2011-08-24 00:04 5158如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ... -
aaaaa
2011-08-24 00:04 1028如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ... -
jbytearray转c++byte数组
2011-08-24 00:02 1398jbyte * arrayBody = env->G ...
相关推荐
本资源提供了《使用ATL编写一个简单的COM服务器》一文的配套源代码,旨在帮助读者更好地理解和实践ATL与COM的概念和技术。 ATL的核心是模板类,这些模板类为开发者提供了一种创建高效、轻量级COM对象的方法。在ATL...
例如,ATL COM项目通常会包含一个CComCoClass类,它是实现COM服务器的基础。开发者可以通过继承CComCoClass并定义类工厂(Class Factory)和接口实现来创建自己的COM对象。 在“ComTest”这个文件夹中,可能包含的...
这些示例代码会展示如何创建一个简单的ATL COM服务器,如何定义和实现接口,以及如何在客户端程序中使用这个组件。通过分析和运行这些例子,初学者可以更好地理解和掌握ATL COM组件的开发流程。 学习ATL COM组件...
本教程旨在指导 VC++ 新手程序员使用 ATL 创建一个 COM 服务器,并使用 Visual C++ 和 Visual Basic 程序来分别调用这个服务器。下面是从这个教程中总结的知识点: 1. 使用 ATL COM Wizard 创建一个新的 ATL 项目:...
ATL则是C++编程中的一个模板库,它为开发者提供了一种高效且直接的方式来创建COM对象。 ATL的设计目标是减少代码量、提高性能,并降低内存占用。在传统的COM开发中,需要编写大量繁琐的接口实现和管理代码。而ATL...
8. **ATL COM服务器和客户端**:服务器是实现COM组件的程序,客户端则使用组件。ATL提供了创建本地服务器(例如EXE或DLL)和远程服务器(例如Out-of-Process服务器)的方法。 9. **COM事件**:通过`CComEventSink`...
在提供的压缩包文件"VC6.0编写的COM在VC6.0中调用"中,可能包含了一个示例,演示了如何在VC6.0环境下调用和使用已创建的ATL COM组件。 除了在桌面应用程序中使用,ATL COM组件还可以应用于Web环境中。例如,可以...
在本示例中,“ATL开发COM及客户端调用举例”显然是一个面向初学者的教学资源,它包括了COM服务器端和客户端的实现,以帮助开发者理解如何使用ATL创建和调用COM组件。 COM是一种跨进程的二进制标准,允许不同语言...
ATL(Active Template Library)是微软为简化COM组件的开发而设计的一个C++库,它提供了一套模板类,可以高效地创建小型、快速的COM对象。 在COM中,对象是通过接口进行交互的,接口定义了对象提供的服务,而对象的...
ATL(Active Template Library)是Microsoft开发的一个C++库,主要用于构建COM(Component Object Model)组件。这本书“ATL开发指南”深入浅出地讲解了如何利用ATL进行高效的COM编程,是C++开发者深入理解并应用ATL...
例如,如果你有一个名为`MyInterface`的接口,你可以使用`DECLARE_INTERFACE_(MyInterface, IUnknown)`来声明它,并使用`ATL_IMPL_INTERFACE_MAP`宏来实现接口的方法。 3. **导出对象(Exported Object)**: 使用`...
总结来说,使用VC++和ATL编写ActiveX控件涉及理解COM和ATL的基本概念,创建和配置项目,定义接口和实现,设计控件外观,处理事件,注册控件,以及测试和部署。这个过程需要对Windows编程和C++有深入的理解,但ATL...
7. **ATL COM ATL项目向导**:Visual Studio中的ATL COM ATL项目向导可以帮助开发者快速创建一个新的ATL项目,自动生成必要的文件和代码结构。 8. **宏和模板**:ATL的核心在于其宏和模板,例如DECLARE_CLASS...
ATL是一个轻量级的库,它通过模板技术极大地简化了COM对象的实现,尤其是对于那些不涉及复杂接口或事件的简单组件。ATL的主要优点在于其高效性和小巧的体积,使得开发者能够快速构建高性能的COM组件。 在ATL中,有...
7. ** ATL COM服务器**:ATL可以用于创建本地或远程服务器,例如,CAtlExeServerBlock和CAtlDllServerBlock分别支持在独立进程或DLL中的COM服务器实现。 8. ** ATL与MFC集成**:尽管ATL主要是为了简化COM编程,但它...
ATL 是一种模板库,它简化了 COM 对象的创建过程,而 COM 是一个二进制标准,允许不同进程中的对象进行通信和交互。 ATL COM 组件是基于 ATL 实现的 COM 对象。ATL 的设计使得开发者能够快速地创建 COM 对象,减少...
此外,还会讲解ATL COM服务器的安全性和性能优化技巧。 **3. COM技术内幕** COM是微软提出的一种二进制兼容的标准,用于组件之间的交互。它定义了一种对象模型,使得不同语言和平台编写的组件可以无缝协作。"COM...
ATL是MFC(Microsoft Foundation Classes)的一个补充,它专注于COM编程,尤其在创建轻量级、高性能的COM服务器方面表现优越。ATL的出现,主要是为了解决MFC在处理COM对象时的复杂性和效率问题。ATL通过模板技术和元...
在项目设置中,确保选中"支持COM服务器"和"支持接口指针"选项,这将帮助我们构建一个可以被其他组件调用的COM对象。 接下来,定义COM接口。在ATL项目中,接口通常定义在`.idl`文件中。例如,你可以创建一个名为`...
本教程将深入探讨如何使用VC++和ATL创建COM服务器,并在Visual Basic中进行调用,同时涵盖编写复杂COM组件的技巧。 1. **了解COM** - COM是一种二进制标准,定义了对象间的接口通信协议,实现了跨进程和跨平台的...