CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  VFP

专题:vfp传递对象给vb.net.请讨论

楼主coolyylu(将来是我)2003-06-01 15:34:06 在 其他数据库开发 / VFP 提问

文章中的vfp是vfp8   ,vs.net   第一版的框架,win2003   server  
           
  传递对象的机制:vb.net调用vfp的com  
          为什么要使用vfp写com,这个vfp的帮助有写原因.简单的说,vfp作为中间层,处理数据是高效的,高效表现于数据的处理能力和写中间层的简介方便,快速.  
   
          在vb.net中,调用vfp写的com,如果vfp的接口方法返回结果是vfp的对象类型,vb.net中如何识和使用这些对象呢?譬如返回一个collection类功能的对象?  
     
          今天我在这些抛砖引玉,讨论vfp的com   以及和vb.net的关系.下面以传递类似collection类功能的对象为例子.介绍以前先简单介绍collection的功能,collection类的其中一个很重要的功能:一个元素的集合.这个集合可以是记录集合,可以是listbox的集合,等等,并提供索引等功能.  
   
            如果在vb.net和vfp中传递不多不少的数据的时候我不使用xml或者其他数据类型,而使用对象,我们如何处理,当然这这是传递对象的一个功能而已.  
   
  下面我们给出代码  
   
  第一部分是vfp写的com的代码:  
  *-   这是一个主类  
  *-   用于返回对象到vb.net   ,使用GetTestObj方法  
  *-   用于测试vb.net返回到vfp的对象,使用GetStringFromNetObject方法  
  *-   请注意oTCol   =   NEWOBJECT("testcom.mycollection"),这里使用了com创建了collection类功能的对象.为了在vb.net中转换类型,将object转换到下面指定的mycollection组件类型.当然这个转换相信在delphi等也可以转换的.  
  *-   第二个类是mycollection,象vb.net提供类型识别.其他语言调用vfp的对象也只能通过com形式.  
  DEFINE   CLASS   mycom   as   Custom   OLEPUBLIC  
                DIMENSION   GetTestObj_COMATTRIB[4]  
        GetTestObj_COMATTRIB[1]   =   0x100000  
        GetTestObj_COMATTRIB[2]   =   "get   vfp   object"  
        GetTestObj_COMATTRIB[3]   =     "GetTestObj"  
        GetTestObj_COMATTRIB[4]   =   "collection"  
         
                FUNCTION   GetTestObj()   As   testcom.mycollection  
                                  LOCAL   oTCol   As   Collection    
                                  oTCol   =   NEWOBJECT("testcom.mycollection")  
                                  oTCol.Add("apple")  
                                  oTCol.Add("Banan")  
                                  oTCol.Add("Orange")  
                                  oTCol.Tag   =   "myname"  
                                  RETURN   oTCol  
                ENDFUNC    
                FUNCTION   GetStringFromNetObject(toObj   As   Collection   )   As   String    
                                LOCAL   lcS   As   String    
                                lcS   =   [norm]  
                                LOCAL   oe   As   Exception    
                                TRY    
                                                              lcS   =   toObj.Class    
                                CATCH   TO   oe  
                                                              lcS   =   "wrong"   +   oe.Message  
                                ENDTRY  
                                RETURN   lcS  
                ENDFUNC    
                 
  ENDDEFINE    
  DEFINE   CLASS   mycollection   As   Collection   OLEPUBLIC    
   
  ENDDEFINE    
   
   
  第二部分是vb.net的客户端测试代码  
  测试的环境是创建一个窗口,和在窗口上添加一个listbox和一个按钮,并在按钮下添加一下代码.代码的结果是在listbox创建水果列表.水果列表是由mycom返回的collection对象获得的.那么对于表的记录也可以通过这样传递....  
          Private   Sub   Button1_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button1.Click  
                  Dim   oTC   As   New   mycom()  
                  Dim   lc   As   String  
                  Dim   oCol   As   mycollection  
   
                  oCol   =   CType(oTC.GetTestObj(),   mycollection)  
                  lc   =   oCol.Class  
                  Dim   i   As   Int32   =   0  
                  For   i   =   3   -   2   To   oCol.Count  
                          Me.ListBox1.Items.Add(oCol.Item(i))  
                  Next  
   
                  Try  
                          MsgBox(lc)  
                  Catch   oe   As   Exception  
                          MsgBox(oe.Source())  
                  End   Try  
   
          End   Sub  
   
  总结;如果采用多层结构的系统,那么使用vfp写中间件的时候,有时候回传递对象,会涉及远程调用等技术.对于前端有可能使用vfp,有时候会使用vb.net等等...处理好中间层对于产品的多样化有好处.有些客户可能不喜欢vfp写的界面..作为一些引子,先到这儿/  
  问题点数:0、回复次数:1Top

1 楼foxbuilder(狐思乱想)回复于 2003-06-02 15:34:56 得分 0

不止是vfp8,vb或其它工具写的com,在.net里应该都可以这样.  
   
  另外我发现,带com组件引用至.net时会作一些相应转换(.net将以此com组件为基类派生出一个新类供.net使用,   新类增加dock,tag(object)等.net属性和方法),   相应在bin上当下会增相一个dll文件.  
   
  如引用excel时,bin目录增加Interop.Excel.dll文件.  
  引用vsflex7.ocx   时,会增加AxInterop.VSFlex7.dll文件  
   
  vsFlex7.ocx   是com组件,而AxInterop.VSFlex7.dll是.net组件,从vsFlex7.ocx派生而来,   当然,待到使用AxInterop.VSFlex7.dll时,你还是少不了vsFlex7.ocx,它扮解一个基类角色.  
   
   
  Top

相关问题

  • vb中数组的传递!
  • 如何用过程传递数组数量,VB与.net的不同????
  • 如何从VC向VB传递数组
  • 如何在VB中传递数组?
  • vb中怎么传递二维数组
  • VB控件的属性传递方法
  • vb中参数传递的问题
  • 请问VB怎么传递数组?
  • 高分请教如何传递一个结构体从VC COM组件-〉.NET VB程序?(在线等待)
  • 关于.net的函数传递???

关键词

  • .net
  • vb.net
  • vfp
  • com
  • vb
  • 数据
  • 对象
  • 集合
  • 传递
  • 功能

得分解答快速导航

  • 帖主:coolyylu

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo