我想把一些业务处理封装到VFP编译的进程内COM组件(DLL)中,这样的话每次升级时只升级这个COM的DLL就行了。
这个COM的项目名称为myServer.pjx,里面定义了一个类myClass,myClass类定义了一个方法Handler(),参数为要处理的表别名cTableAlias,在该方法中对参数指定的表别名cTableAlias进行相关业务处理,都是些表操作的语句,例如Select命令,Scan命令等。
该项目编译后的文件名称为myServer.Dll,在程序中调用这个COM的方法是:
oObject = CreateObject("myServer.myClass") &&能成功创建组件对象
oObject.Handler(cTableAlias) &&cTableAlias已经通过Select (cTableAlias)选择到当前工作区
但是当我这样尝试着做的时候却在临门一脚被当头一棒,因为调用oObject.Handler(cTableAlias)方法会触发错误,这个错误发生在当我在该方法中执行表操作命令例如Select (cTableAlias)、或Reccount(cTableAlias)等函数时,错误的提示信息大意是“表别名不存在”!
上网查了一下英文的网页,大概意思是VFP编译的进程内COM DLL组件在调用时不能“看见”调用者的变量、工作区等,所以不能在这个COM中使用调用者的表别名。但是微软的VFP扩展组件VFPCOM.DLL的comutil类的CursorToRS()方法却能神奇地将调用者的当前工作区打开的表的记录导入到ADO.RecordSet实例对象中,为什么VFPCOM.DLL这个COM就能做到呢?
我就想象VFPCOM.DLL那样在VFP编译的COM DLL内操作调用者的工作区中打开的表,请问该如何实现呢?请各位大师赐教!
附注:
VFPCOM.DLL的下载地址为http://www.microsoft.com/en-us/download/details.aspx?id=2049
示例代码为:
#DEFINE C_VFPCOMCLASS 'vfpcom.comutil'
oVFPCOM = CreateObject(C_VFPCOMCLASS)
SELECT * FROM cTableName INTO CURSOR foo
oRecordSet=CreateObject('ADODB.RECORDSET')
nError = oVFPCOM.CURSORTORS(oRecordSet)