VFP帮助中的FLL资料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、将参数传递到VisualFoxProAPI函数...........................................1二、如何从ActiveX控件和FLL库返回值............................................2三、外部库的参数..................................................................3四、创建VisualFoxPro动态链接库.................................................7五、访问VisualFoxPro的变量和字段...............................................7六、用VisualFoxProAPI管理内存.................................................8七、如何管理内存..................................................................9八、FoxInfo结构.................................................................10一、将参数传递到VisualFoxProAPI函数VisualFoxProAPI例程常常需要特定VisualFoxPro数据结构的参数。下列部分提供了VisualFoxPro数据类型和附加数据结构的列表。有关实际的类型定义和结构定义,参考Pro_ext.h文件。VisualFoxProAPI数据类型下列数据类型可用于VisualFoxProAPI例程。数据类型说明EDLINE编辑窗口中打开文件中的行号。第一行是1。EDPOS编辑窗口中打开文件中字符的偏移位置。该文件或备注文件中第一个字符的偏移位置是0。FCHAN文件通道。每个由VisualFoxPro或使用_FCreate()和_FOpen()通过API打开的文件都被指派一个FCHAN。FPFI指向返回整数值函数的32位指针。ITEMID指派给菜单上单个命令的唯一标识符。MENUID指派给菜单的唯一标识符。MHANDLE给予每个由VisualFoxPro或使用_AllocHand()通过API分配的内存块的唯一标识符。可以使用_HandToPtr()放弃对指针的引用。NTI命名表索引。每个变量和表字段名都拥有该表中的一项。WHANDLE窗口句柄。指派给由VisualFoxPro或使用_WOpen()通过API打开窗口的唯一标识符。注意:由于FAR指针不适合于32位编译器,Pro_ext.h中的#define语句将FAR、_far和__far重新定义为null值。VisualFoxProAPI数据结构下表列示了VisualFoxProAPI库中使用的主要数据结构。结构说明EventRec用于描述给定时间上系统正在进行什么操作的结构。FoxInfo用于FLL库中VisualFoxPro和程序间的通讯,不能用于.ocx文件。FoxTable用于FLL库中VisualFoxPro和程序间的通讯,不能用于.ocx文件。Locator用于访问参数值(FLL)或VisualFoxPro变量或字段(FLL和ocx)的结构。ParamBlk用于FLL库中VisualFoxPro和程序间的通讯,不能用于.ocx文件。Parameter用于FLL库中VisualFoxPro和程序间的通讯,不能用于.ocx文件。Point定义屏幕上单个点的水平和垂直坐标的结构。以行和列指定坐标。Rect定义屏幕上矩形坐标的结构。矩形的左上角坐标由(top,left)定义,而右下角由(bottom-1,right-1)定义。以行和列指定坐标。Value用于访问参数值(FLL)或VisualFoxPro变量或字段(FLL和OCX)的结构。二、如何从ActiveX控件和FLL库返回值可以将值从ActiveX控件或VisualFoxPro动态连接库(FLL)中返回到VisualFoxPro。要将值从ActiveX控件返回到VisualFoxPro在该控件中使用RETURN语句并传递单个值。下列示例使用RETURN语句返回存储在VERSION中的版本号:复制代码#defineVERSION101//此处是其他代码longCPyCtrl::GetVersion(){//在变量fVersion中设置版本号returnVERSION;}从FLL库中返回值当要从FLL库中返回值时,请使用API函数,而不是C或C++本身的命令。注意:当从ActiveX控件(.ocx)文件中返回值时,不要使用API函数从该FLL库中返回值,而使用RETURN语句。要从FLL库中返回值使用下表所列示的API函数。下列API函数只能用于FLL库。函数说明_RetChar(char*string)设置函数返回值为NULL结尾的串。_RetCurrency(CCYcval,intwidth)设置函数返回值为货币值。_RetDateStr(char*string)设置函数返回值为日期。该日期以mm/dd/yy[yy]格式指定。_RetDateTimeStr(char*string)设置函数返回值为以mm/dd/yy[yy]hh:mm:ss格式指定的日期和时间。_RetFloat(doubleflt,intwidth,intdec)设置函数返回值为为浮点值。_RetInt(longival,intwidth)设置函数返回值为数字值。_RetLogical(intflag)设置函数返回值为逻辑值。零被当作假(FALSE)。任何非零值都被当作真(TRUE)。_RetVal(Value*val)传递完整的VisualFoxProValue结构,可以返回除备注型以外的任何VisualFoxPro数据类型。必须调用_RetVal()来返回包含内置null字符的串或.NULL.值。注意:要返回对象数据类型的值,请使用_RetVal()函数填充Value结构的ev_object字段。下面示例,Sum接收了对表中数值型字段的引用并使用_RetFloat返回了该字段值的和:复制代码#includePro_ext.hSum(ParamBlk*parm){//声明变量doubletot=0,rec_cnt;inti=0,workarea=-1;//-1是当前工作区Valueval;//GOTOP到表头_DBRewind(workarea);//GetRECCOUNT()获取记录数rec_cnt=_DBRecCount(workarea);//循环遍历表for(i=0;irec_cnt;i++){//将字段值放置到Value结构中_Load(&parm-p[0].loc,&val);//将该值添加到累计总数tot+=val.ev_real;//SKIP1在工作区中下跳一条记录_DBSkip(workarea,1);}//将总数值返回到VisualFoxPro_RetFloat(tot,10,4);}//Sum函数获得一个引用参数FoxInfomyFoxInfo[]={{SUM,Sum,1,R}};FoxTable_FoxTable={(FoxTable*)0,sizeof(myFoxInfo)/sizeof(FoxInfo),myFoxInfo};假设当前打开的表中有名为amount的数值型字段,VisualFoxPro程序中的下列代码行可以调用该函数:复制代码?SUM(@amount)三、外部库的参数当VisualFoxPro调用ActiveX控件、COM对象或VisualFoxPro动态连接库(FLL)时,可以传递参数。例如,ActiveX控件可能在调用它其中一个方法时接收参数。同样,VisualFoxPro程序也可能调用FLL库中的函数并将参数传递给它。VisualFoxPro可以通过值或通过引用将参数传递给外部库。在默认情况下,遵循SETUDFPARMS命令的设置。然而,其他变量,如数组或字段,以及表达式通过值来传递。有关如何改变传递参数默认方法的信息,请参见将数据传递给参数。由于ActiveX控件和COM对象是标准的Windows程序,不需要特别的机制将参数从VisualFoxPro传递到ActiveX控件或COM对象。可以象从任何C或C++程序接收参数那样编写库代码。然而,FLL库中的函数使用FoxInfo结构从VisualFoxPro中获取数据。FoxInfo结构列示了库函数以及它们所期待的参数数量和类型。例如,下列FoxInfo结构属于带有一个内部被称为dates,接收一个字符型参数的函数的库:复制代码FoxInfomyFoxInfo[]={{DATES,(FPFI)dates,1,C}};在外部库中定义的函数实际上只接收了一个参数,也就是到参数块的指针。该参数块,在ParamBlk结构中定义,存储了所有有关从VisualFoxPro函数调用传递来的参数信息。下面的代码举例说明了函数声明应当遵循的格式:复制代码voidfunction_name(ParamBlk*parm)例如,dates的函数定义是:复制代码voiddates(ParamBlk*parm)ParamBlk结构由表示参数数量的整数组成,后面直接跟随参数联合的数组。该结构定义被包含在Pro_ext.h中:复制代码/*库函数的参数列表。*/typedefstruct{shortintpCount;/*传递的参数数量*/Parameterp[1];/*pCount参数*/}ParamBlk;包含在ParamBlk结构中的Parametertypedef是Value结构和Locator结构的组合。通过值的调用由Value结构处理;通过引用的调用由Locator结构处理。当从VisualFoxPro中调用函数时,可以使用这些结构接收传递到函数的参数。下列从Pro_ext.h文件中提取出来的信息展示了Parameter类型的定义:复制代码/*到库函数的参数。*/typedefunion{Valueval;Locatorloc;}Parameter;Value结构定义如果通过值将参数传递到函数,则使用Value结构来接收它。下面的Value结构定义是从Pro_ext.h文件中提取出来的:复制代码//Anexpression'svalue.Typedefstruct{charev_type;charev_padding;shortev_width;unsignedev_length;longev_long;doubleev_real;CCYev_currency;MHANDLEev_handle;ULONGev_object;}Value;Value结构域下表是对于不同数据类型,可以在Value结构中传递和接收值的指导。只有为数据类型列示的结构域才可以用于该数据类型。不同数据类型的Value结构内容数据类型结构域值字符型ev_type'C'ev_length串长度ev_handle到串的MHANDLE数值型ev_type'N'ev_width显示宽度ev_length小数位ev_real双精度整型(Integer)ev_type'I'ev_width显示宽度ev_long长整型(Longinteger)日期型ev_type'D'ev_real日期1日期时间(DateTime)ev_type'T'ev_real日期+(秒/86400.0)货币型ev_type'Y'ev_width显示宽度ev_currency货币值2逻辑型ev_type'L'ev_length0或1备注型ev_type'M'ev_wdithFCHANev_long备注字段长度ev_real备注字段偏移量通用(General)ev_type'G'ev_wdithFCHANev_long通用型字段长度e

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功