在.NET里使用Visual FoxPro资源-vfp编写的COM组件

第二部分:在.NET里使用vfp编写的COM组件

Fox能够灵活、直观、快速处理数据,使得它非常适合应用在业务逻辑层次。从Visual FoxPro 5开始,微软不断加强Visual FoxPro 的COM组件开发上能力。简单归纳一下Visual FoxPro 在COM组件编写的特点:

  • 全新的运行时刻库:VFPnT.DLL(n代表版本号)。在这个运行库中,删除了大量老式的和界面控制元素,更小巧、更稳定、更快速。
  • 全新的SESSION对象。在多线程状态下提供很好的隔离性。
  • 内置对XML的支持,方便了多层应用中记录集(游标)的传递。
  • 通过ExecScript() 函数,提供了动态执行多行语句的能力。
  • 完全支持COM+标准。

用Fox编写COM组件是一件愉快的事情,.NET提供了对COM组件的调用支持,于是我们将快乐在.NET里继续。

在Visual FoxPro里编写一个COM组件:(CODE#5)

DEFINE CLASS Customer as FoxBaseClass olepublic
*继承至自定义的 FoxBase 类
*声明时使用 olepublic 关键字,告诉编译器定义的是一个COM组件
PROCEDURE Init()
this.DataBasePath=SUBSTR(SYS(2004),1,RAT("\",SYS(2004),2))+"data\"
DODEFAULT()
ENDPROC
* GetCountry() 返回客户说在国家的列表,结果用XML表示
FUNCTION GetCountry() as String
LOCAL cXml as String
SELECT distinc(country) as country FROM customer INTO CURSOR Temp
CURSORTOXML("Temp","cXml",1,16,0,"1")
USE IN temp
RETURN cXml
ENDFUNC
* GetCustomer() 返回指定国家的客户列表,结果用XML表示
FUNCTION GetCustomer(cCountry as String) as String
LOCAL cXml as String
SELECT * FROM customer WHERE Country=m.cCountry INTO CURSOR Temp
CURSORTOXML("Temp","cXml",1,16,0,"1")
USE IN temp
RETURN cXml
ENDFUNC
*合计指定国家的销售净额。这里通过调用DBC里的存储过程取得结果
FUNCTION GetSumOrderNet(cCountry as String) as Double
RETURN Get_Sum_Order_Net(m.cCountry)
ENDFUNC
*写入日志的接口。这里通过调用DBC里的存储过程取得结果
FUNCTION LogIt(cMsg as String) as Boolean
logMsg(cMsg)
RETURN .t.
ENDFUNC

ENDDEFINE

接着,我们要编译代码,生成一个COM组件。假设将以上代码放在一个名为foxclass.prg的文件里,使用下面的语句,就能得到进程内COM组件:(CODE#6)

*先将foxclass.prg放入一个名为foxWebService的项目(Project)里,如果此项目不存在,就生成项目
BUILD PROJECT foxWebService FROM foxclass
*编译foxWebService项目成为一个COM组件(foxwenservice.dll),并且在系统里注册它。
BUILD MTDLL foxWebService FROM foxWebService recompile

在.NET里,如果希望引用一个非托管的COM组件,就必须为非托管COM提供一个.NET定义。可以使用.NET SDK 里的TLBIMP工具程序把一个非托管的COM类型库转换成为.NET的元数据,这种元数据实际上就是一个可以被任何托管代码访问的容器类,把原来的非托管代码包装起来。(CODE#7)
在命令提示符里执行,如下语句:

将 H:\NET\fox_com\foxwebservice.dll 转化为 .NET的,存放在H:\NET\ foxwebservice.dll里

TlbImp /OUT:net_fox_com.dll foxwebservice.dll

如果你不是很清楚TlbImp是怎样安排net_fox_com里面的对象,请使用.NET SDK提供的ildasm.exe工具查看net_fox_com.dll的结构。这样,我们就可以在C# 程序里使用我们刚才编写的 COM 组件了:(CODE#8)

net_fox_com.CustomerClass obis= new net_fox_com.CustomerClass();
obis.GetCountry();
obis.GetSumOrderNet(“UK”);

如果C# 程序用到了net_fox_com中的类定,可以这样编译C#代码,在命令提示符里执行这样的代码:(CODE#9)

csc /t:winexe com_client_sample.cs /r:net_fox_com.dll

特别之处在于加入了对net_fox_com.dll的引用。还有需要注意的是,务必把net_fox_com.dll文件放在.NET的搜索路径里,不然执行应用程序时会报错。我的做法是将EXE文件与net_fox_com.dll放在同一个目录里面;另外,如果COM组件发生了改变,必须重新生成net_fox_com.dll,并且重新编译C#代码。
.NET对COM体系的平稳过渡,体现了微软对开发人员的尊重。试一试,你会发现一切是如此简单……

时间: 2024-10-26 05:37:32

在.NET里使用Visual FoxPro资源-vfp编写的COM组件的相关文章

在.NET里使用Visual FoxPro资源-vfp编写的Web Service

第三部分:在.NET里使用vfp编写的Web Service .NET和JAVA都以能够跨越不同平台作为卖点,JAVA似乎注重代码本身的跨平台特性..NET则更关注数据的跨平台,于是 .NET高举着XML Web Service的大旗出现在我们面前,从某种意义上说 .NET 就是 XML Web Service. Visual FoxPro 对XML Web Service 的支持是建立在MS XML与SOAP组件基础上的,用Visual FoxPro 编写 Web Service的核心就是上文

在.NET里使用Visual FoxPro资源-前言

这篇文章是我为<程序员>杂志写的,发表在该杂志 2002 年第 9 期,应该是<程序员>杂志有史以来首篇有关于 Visual FoxPro 的文章,这里真的要感谢编辑先生-- 写这篇东西十分吃力,因为涉足的领域太新了,几乎没有资料可以借鉴,即便是原版的.还好,从去年开始我就断断续续的看了一点有关C#..Net的东西,近来也对有关"Visual FoxPro 与 .NET"有一些思考,虽然吃力,总算不辱使命. Visual FoxPro 对于 .NET 的支持应该

在.NET里使用Visual FoxPro资源-Visual FoxPro OLE DB Provider

第一部分:Visual FoxPro OLE DB Provider 说起 Fox,第一个印象就是DBF 数据表格,将近20年的发展历程,不知道有多少系统使用DBF存放数据.转入 .NET 平台以后,怎样访问 Fox系列数据自然是很多开发人员关心的问题. 在 Visual FoxPro 7以前,微软只提供了Fox的ODBC的驱动程序.通过ODBC访问Fox数据效率比较低,更要命的是Visual FoxPro 3中增加的数据库容器(Database Container,简称DBC)中的许多特性都不

vfp-哪里有“Visual FoxPro权威指南写作原稿及光盘”

问题描述 哪里有"Visual FoxPro权威指南写作原稿及光盘" "Visual FoxPro权威指南写作原稿及光盘",此书哪里还能买到. 解决方案 搜索第一条就是: http://blog.csdn.net/zhanghongju/article/details/38748457 解决方案二: http://blog.csdn.net/zhanghongju/article/details/41020107

Visual Foxpro漫谈(五)-Visual FoxPro 7 的特性

前面已经提到多次,Visual FoxPro 7 已经在2001年5月中旬正式发布的,6月份在美国上市.现在不少网友已经得到了Visual FoxPro 7的英语正式版,使用之后,产生了种种评判.在美国人们认为,Visual FoxPro 7是继 Visual FoxPro 3以后 Fox 发展史上最具有"革命意义"的版本,评价是很高的:而在国内,不少尝鲜者感叹:这是微软不好意思说SP的产品,简直就是Visual FoxPro 6+SP6--两种评价相差这么大,谁是谁非呢? 笔者在20

visual foxpro 7.0漫谈

今年是开发工具集中更新版本的一年:微软的Visual Studio.Net,Borland 的Delphi 6.Sybase的Power Builder 8都相继推出正式版或是测试版,我们的Visual FoxPro 当然也不会放过这业界大比武的好时机,今年5月微软发布了Visual FoxPro 7,它是继1995年Fox家族第一个可视化成员Visual FoxPro 3以来最具革命意义的版本. "革命意义"这个词可不是我信口开河.随便使用的,这是国外的Fox社区对Visual Fo

Visual Foxpro漫谈(二)

Visual FoxPro 已经过时了吗 恕我直言,这样的问题我真的听腻了.这个问题我听了好几年了.从谣言出现到今天Visual FoxPro的版本已经生了两次变化,就是Visual FoxPro 6.0 与2001年春天推出的Visual FoxPro 7.0.根据微软的官方消息,Visual FoxPro 8(可能是这个名称吧)已经在研发之中了.我不敢保证是否会有Visual FoxPro 9.0(这就像我不敢保证微软是否在那时还存在一样).可以这样认为,只要不出意外情况(比如微软倒闭.业界

Visual FoxPro 7与Web Service

说在前面 本文的实验必须在连接Internet的前提下进行! 本文关于Web Service的定义部分参阅了台湾基峰资讯股份有限公司的<C# & ASP.NET>一书. Visual FoxPro 7全面支持Web Service Visual FoxPro 7对Web Service有特别的支持,这是Visual FoxPro 7的一大卖点,也是Visual FoxPro 作为微软.Net构架下的一种高效开发工具的显著标志(注意:Visual FoxPro不是.Net 语言,但它是.

Visual Foxpro漫谈(四)

Visual FoxPro 从Visual Studio中分离出来了 2001年2月26日,微软宣布将Visual FoxPro 7从Visual Studio 中分离出来,这是一个好消息还是坏消息呢?我们来分析一下: 我们失去了什么 我们先来观察,Visual FoxPro不成为.Net语言,在技术上损失的是:不能开发基于.Net的Web应用程序. Visual Studio.Net 是一种擅长于开发Web应用程序的工具,过去与现在微软霸占着"桌面应用程序"应用市场,现在微软要吞噬现