COM/COM+作为取代OLE的一种新技术,问世已经很久了,PB7中也早已提供了对它的支持,不过从现实情况上看,似乎大家使用到的不是很多,其实对于新一代的互联网应用,它还是能够发挥很大作用.下面我将从COM/COM+组件的生成,调用,以及应用范围上谈谈我的看法和心得.
我将用PB10为开发工具做说明.假设要做一个表达式计算的COM组件,我想这个例子比较典型,用到了datastore,datawindowobject,用户对象等,既不会太简单,也不会太复杂(代码不多).
首先最基本的操作,必须先有个WorkSpace,然后打开COM/COM+创建向导:
选中项目后,直接下一步,基本上不用改动,就完成了.
创建完成后,系统就有了一些基本对象:
下面建立一个extend形式的datawindowobject,主要用于计算表达式用的,只要满足有一个列就行了.保存其名字为calc
然后在n_genapp对象中建立一个计算表达式的函数:
public function string of_calc (string as_expression);
datastore lds_calc
string ls_rtn
lds_calc=create datastore
lds_calc.dataobject="calc"
lds_calc.insertrow(0)
ls_rtn=lds_calc.describe("evaluate('" + as_expression + "', 1)")
destroy lds_calc
return ls_rtn
end function
下面就打开project对象p_genapp_commts,进行发布.
注意,发布的project对象属性中,需要修改为将整个pbl的对象一起发布.
发布完成后,就可以调用了.先试试用pb程序调用:
新建一个程序,和窗口:
窗口上放置一个按钮,按钮中写入代码:
OLEObject OleObj
Integer li_rc
OleObj = CREATE OLEObject
li_rc = OleObj.ConnectToNewObject("PB100.n_genapp.1.0")
IF li_rc < 0 THEN
DESTROY OleObj
MessageBox("Connecting to COM Object Failed", "Error: " + String(li_rc))
Return
END IF
sle_2.text=string(OleObj.of_calc(sle_1.text))
OleObj.DisconnectObject()
DESTROY OleObj
执行后,就可以看到计算结果了.
下面我们看看,在其他开发工具中如何调用此COM组件,以BCB6为例:
首先将genapp.dll导入类型库:
执行安装,将COM组件安装到控件面板,然后建立一个窗口,放置几个控件:
在"调用PBCOM"按钮中Clicked事件写代码:
WideString ls_express;
ls_express=Edit1->Text;
Edit2->Text = COClass_n_genapp1->of_calc(ls_express);
点击按钮,就可以看到计算结果了.
用VB调用也比较简单,VC调用稍微复杂点,这里就不缀述了.