用ATL写的COM组件在VC里怎样使用

用ATL写的COM组件在VC里怎样使用,第1张

该方法实现步骤如下:

1. 首先添加COM初始和终止代码。在应用程序类的初始化实例函数InitInstance()中添加如下代码:

CoInitialize(NULL)

……

CoUnInitialize()

上述语句运行在MFC框架/非MFC框架中,但由于本文程序使用MFC框架,所以也可以利用AfxOleInit()函数对其进行初始化。

2. 然后用#include 语句包含对组件头文件的引用并创建组件对象。在头文件中包含了接口的C++定义以及说明接口ID IID和类ID CLSID的符号化常量。创建工作在初始化对话框函数中进行:

IAccount pAccount=NULL

……

CoCreateInstance(CLSID_Account,

NULL,

CLSCTX_INPROC_SERVER,

IID_Iaccount,

reinterpret_cast (&pAccount))

3. 最后释放组件对象。该工作应在程序退出之前完成,比如在消息WM_CLOSE的响应函数中进行:

if(pAccount!=NULL)

pAccount->Realease()

对该代码组件中的其他功能函数的调用,可以通过组件对象的接口指针pAccount来进行:

……

BSTR bstrResult

PAccount->Post(100,bstrResult)

SysFreeString(bstrResult)

……

由于COM支持类在comdef. h中定义,所以还要包含对该头文件的引用,才可以使程序正常运行。

添加一个类模块,名称为“ClsAdd”,并输入如下几行代码:

Option Explicit

Public x, y As Integer

Public Function myAdd() As Integer

myAdd = x + y

End Function

3、打开“工程属性”对话框,选择“生成”,选中“自动升级”;选择“部件”,选中“远程服务器文件”(此点很重要,否则编译时不会生成类型库文件COM_Test.TLB)及“二进制兼容”,最后“确定”

4、保存并编译,生成“Com_Test.dll”

5、打开“控制面板/管理/组件服务”,在“COM+应用程序”下利用“COM+应用程序安装向导”创建一个空的COM+应用程序,名称为“MyTest”

6、在“MyTest”下,新建“组件”,在“组件安装向导”中,选择“安装新组件”(注意:不要使用“导入已被注册的组件”),然后将第4步生成的Com_Test.dll及Com_Test.tlb都添加进来(两个文件都要!),完成。

7、右击“COM+应用程序”上方的“我的电脑”,选择“属性”,然后在“属性”对话框中的“默认属性”页下,将“默认身份验证级”改为“无”,确定。

8、右击“MyTest”,导出客户端的“应用代理”。注意:在导出对话框中,必须选择“应用程序代理”而不是“服务器应用程序”!

9、将导出后的两个文件(即应用程序代理)安装到win98机器上,此时它会在注册表中添加几处注册项,并在C:\program files\ComPlus Applications下产生一个以CLISD命名的文件夹,打开来可看到Com_Test.tlb及Apl82.tmp二个文件。

注意:win98机器上是没有Com_Test.dll文件的,该文件在win2000 server机器上!

好了,准备工作至此结束,下面在win98机器上来验证你的COM+配置型组件能否工作。(先用Administrator及口令登录)

10、启动VB(+sp5.0),创建一个exe工程,在窗体上放置一个文本框与一个命令按钮,并在命令按钮的Click事件中加入代码:

Dim ox as object

set ox=createobject("Com_Test.ClsAdd","win2000 server 的IP地址")

ox.x=12

ox.y=13

text1.text=ox.myAdd()

执行程序,win2000 server 机器的硬盘灯一阵闪烁之后,Text1中欢快地跳出“25”

---成功了!

你是添加控件还是什么? WM_CHILD 表示创建一个子窗口 WM_POPUP表示创建一个d出窗口 你可以在属性对话框中添加一个这样的标准windows消息WM_POPUP来添加,系统会自动的生成一段代码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11965466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存