VFP-帮助中得FLL资料.doc
《VFP-帮助中得FLL资料.doc》由会员分享,可在线阅读,更多相关《VFP-帮助中得FLL资料.doc(10页珍藏版)》请在咨信网上搜索。
1、一、将参数传递到 Visual FoxPro API 函数1二、如何从 ActiveX 控件与 FLL 库返回值2三、外部库得参数4四、创建 Visual FoxPro 动态链接库8五、访问 Visual FoxPro 得变量与字段10六、用 Visual FoxPro API 管理内存11七、如何管理内存12八、FoxInfo 结构13一、将参数传递到 Visual FoxPro API 函数Visual FoxPro API 例程常常需要特定 Visual FoxPro 数据结构得参数。下列部分提供了 Visual FoxPro 数据类型与附加数据结构得列表。有关实际得类型定义与结构定义,
2、参考 Pro_ext、h 文件。Visual FoxPro API 数据类型下列数据类型可用于 Visual FoxPro API 例程。数据类型说明EDLINE编辑窗口中打开文件中得行号。第一行就是 1。EDPOS编辑窗口中打开文件中字符得偏移位置。该文件或备注文件中第一个字符得偏移位置就是 0。FCHAN文件通道。每个由 Visual FoxPro 或使用 _FCreate( ) 与 _FOpen( ) 通过 API 打开得文件都被指派一个 FCHAN。FPFI指向返回整数值函数得 32 位指针。ITEMID指派给菜单上单个命令得唯一标识符。MENUID指派给菜单得唯一标识符。MHANDL
3、E给予每个由 Visual FoxPro 或使用 _AllocHand( ) 通过 API 分配得内存块得唯一标识符。可以使用 _HandToPtr( ) 放弃对指针得引用。 NTI命名表索引。每个变量与表字段名都拥有该表中得一项。WHANDLE窗口句柄。指派给由 Visual FoxPro 或使用 _WOpen( ) 通过 API 打开窗口得唯一标识符。 注意:由于 FAR 指针不适合于 32 位编译器,Pro_ext、h 中得 #define 语句将 FAR、_far 与 _far 重新定义为 null 值。Visual FoxPro API 数据结构下表列示了 Visual FoxPro
4、 API 库中使用得主要数据结构。结构说明EventRec用于描述给定时间上系统正在进行什么操作得结构。FoxInfo用于 FLL 库中 Visual FoxPro 与程序间得通讯,不能用于 、ocx 文件。FoxTable用于 FLL 库中 Visual FoxPro 与程序间得通讯,不能用于 、ocx 文件。Locator用于访问参数值(FLL)或 Visual FoxPro 变量或字段(FLL 与 ocx)得结构。ParamBlk用于 FLL 库中 Visual FoxPro 与程序间得通讯,不能用于 、ocx 文件。Parameter用于 FLL 库中 Visual FoxPro 与程
5、序间得通讯,不能用于 、ocx 文件。Point定义屏幕上单个点得水平与垂直坐标得结构。以行与列指定坐标。Rect定义屏幕上矩形坐标得结构。矩形得左上角坐标由(top,left)定义,而右下角由 (bottom-1,right-1)定义。以行与列指定坐标。Value用于访问参数值(FLL)或 Visual FoxPro 变量或字段 (FLL 与 OCX)得结构。二、如何从 ActiveX 控件与 FLL 库返回值可以将值从 ActiveX 控件或 Visual FoxPro 动态连接库(FLL) 中返回到 Visual FoxPro。要将值从 ActiveX 控件返回到 Visual FoxP
6、ro在该控件中使用 RETURN 语句并传递单个值。下列示例使用 RETURN 语句返回存储在 VERSION 中得版本号:复制代码#define VERSION 101/ 此处就是其她代码long CPyCtrl:GetVersion() / 在变量 fVersion 中设置版本号 return VERSION;从 FLL 库中返回值当要从 FLL 库中返回值时,请使用 API 函数,而不就是 C 或 C+ 本身得命令。注意:当从 ActiveX 控件 (、ocx) 文件中返回值时,不要使用 API 函数从该 FLL 库中返回值,而使用 RETURN 语句。要从 FLL 库中返回值使用下表所
7、列示得 API 函数。下列 API 函数只能用于 FLL 库。函数说明_RetChar(char *string)设置函数返回值为 NULL 结尾得串。_RetCurrency(CCY cval, int width)设置函数返回值为货币值。_RetDateStr(char *string)设置函数返回值为日期。该日期以 mm/dd/yyyy 格式指定。_RetDateTimeStr(char *string)设置函数返回值为以 mm/dd/yyyy hh:mm:ss 格式指定得日期与时间。_RetFloat(double flt, int width, int dec)设置函数返回值为为浮点
8、值。_RetInt(long ival, int width)设置函数返回值为数字值。_RetLogical(int flag)设置函数返回值为逻辑值。零被当作假(FALSE)。任何非零值都被当作真(TRUE)。_RetVal(Value *val)传递完整得 Visual FoxPro Value 结构,可以返回除备注型以外得任何 Visual FoxPro 数据类型。必须调用 _RetVal( ) 来返回包含内置 null 字符得串或 、NULL、 值。注意:要返回对象数据类型得值,请使用 _RetVal() 函数填充 Value 结构得 ev_object 字段。下面示例,Sum 接收了
9、对表中数值型字段得引用并使用 _RetFloat 返回了该字段值得与:复制代码#include Sum(ParamBlk *parm)/ 声明变量double tot = 0, rec_cnt;int i = 0, workarea = -1; / -1 就是当前工作区Value val;/ GO TOP 到表头_DBRewind(workarea);/ Get RECCOUNT( ) 获取记录数rec_cnt = _DBRecCount(workarea);/ 循环遍历表for(i = 0; i p0、loc, &val); / 将该值添加到累计总数 tot += val、ev_real;
10、/ SKIP 1 在工作区中下跳一条记录 _DBSkip(workarea, 1); / 将总数值返回到 Visual FoxPro_RetFloat(tot, 10, 4); / Sum 函数获得一个引用参数FoxInfo myFoxInfo = SUM, Sum, 1,R ;FoxTable _FoxTable = (FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo;假设当前打开得表中有名为 amount 得数值型字段,Visual FoxPro 程序中得下列代码行可以调用该函数:复制代码? SUM(amount)三、外
11、部库得参数当 Visual FoxPro 调用 ActiveX 控件、 对象或 Visual FoxPro 动态连接库(FLL)时,可以传递参数。例如,ActiveX 控件可能在调用它其中一个方法时接收参数。同样,Visual FoxPro 程序也可能调用 FLL 库中得函数并将参数传递给它。Visual FoxPro 可以通过值或通过引用将参数传递给外部库。在默认情况下,遵循 SET UDFPARMS 命令得设置。然而,其她变量,如数组或字段,以及表达式通过值来传递。有关如何改变传递参数默认方法得信息,请参见 将数据传递给参数。 由于 ActiveX 控件与 对象就是标准得 Windows
12、程序,不需要特别得机制将参数从 Visual FoxPro 传递到 ActiveX 控件或 对象。可以象从任何 C 或 C+ 程序接收参数那样编写库代码。然而,FLL 库中得函数使用 FoxInfo 结构从 Visual FoxPro 中获取数据。FoxInfo 结构列示了库函数以及它们所期待得参数数量与类型。例如,下列 FoxInfo 结构属于带有一个内部被称为 dates ,接收一个字符型参数得函数得库:复制代码FoxInfo myFoxInfo = DATES, (FPFI) dates, 1, C ;在外部库中定义得函数实际上只接收了一个参数,也就就是到参数块得指针。该参数块,在 Pa
13、ramBlk 结构中定义,存储了所有有关从 Visual FoxPro 函数调用传递来得参数信息。下面得代码举例说明了函数声明应当遵循得格式:复制代码void function_name(ParamBlk *parm)例如,dates 得函数定义就是:复制代码void dates(ParamBlk *parm)ParamBlk 结构由表示参数数量得整数组成,后面直接跟随参数联合得数组。该结构定义被包含在 Pro_ext、h 中:复制代码/* 库函数得参数列表。 */typedef struct short int pCount; /* 传递得参数数量 */ Parameter p1; /* p
14、Count 参数 */ ParamBlk;包含在 ParamBlk 结构中得 Parameter typedef 就是 Value 结构与 Locator 结构得组合。通过值得调用由 Value 结构处理;通过引用得调用由 Locator 结构处理。当从 Visual FoxPro 中调用函数时,可以使用这些结构接收传递到函数得参数。下列从 Pro_ext、h 文件中提取出来得信息展示了 Parameter 类型得定义:复制代码/* 到库函数得参数。 */typedef union Value val; Locator loc; Parameter;Value 结构定义如果通过值将参数传递到函
15、数,则使用 Value 结构来接收它。下面得 Value 结构定义就是从 Pro_ext、h 文件中提取出来得:复制代码/ An expressions value、Typedef struct char ev_type; char ev_padding; short ev_width; unsigned ev_length; long ev_long; double ev_real; CCY ev_currency; MHANDLE ev_handle; ULONG ev_object; Value;Value 结构域下表就是对于不同数据类型,可以在 Value 结构中传递与接收值得指导。只
16、有为数据类型列示得结构域才可以用于该数据类型。不同数据类型得 Value 结构内容数据类型结构域值字符型ev_typeCev_length串长度ev_handle到串得 MHANDLE数值型ev_typeNev_width显示宽度ev_length小数位ev_real双精度整型(Integer)ev_typeIev_width显示宽度ev_long长整型(Long integer)日期型ev_typeDev_real日期1日期时间(Date Time)ev_typeTev_real日期 + (秒/86400、0)货币型ev_typeYev_width显示宽度ev_currency货币值2逻辑型
17、ev_typeLev_length0 或 1备注型ev_typeMev_wdithFCHANev_long备注字段长度ev_real备注字段偏移量通用(General)ev_typeGev_wdithFCHANev_long通用型字段长度ev_real通用型字段偏移量对象(Object)ev_typeOev_object对象标识符Nullev_type0 (零)ev_long数据类型1、 日期被表现为使用 ACM 算法集合中 199 算法(Algorithm 199 from Collected Algorithms of the ACM)计算出来得双精度浮点儒略(Julian)日数字。 2、
18、 货币值就是长整型,在最后四个阿拉伯数字之前带有隐含得小数点。注意:ev_length 就是串长度得唯一真实得指示器。由于串可以包含内置得 null 字符,因此串不能以 null 作为终止符。Locator 结构定义使用 Locator 结构操作通过引用传递得参数。下面得 Locator 结构定义就是从 Pro_ext、h 文件提取得:复制代码typedef struct char l_type; short l_where, /* 数据库编号或内存变量得 -1 */ l_NTI, /* 变量名表得偏移量 */ l_offset, /* 数据库中得索引 */ l_subs, /* # 指定得下
19、标 0 = x = 2 */ l_sub1, l_sub2; /* 下标整型值 */ Locator;Locator 结构域下表就是 Locator 结构中域得指导。Locator 域域得用途l_typeRl_where包含该域得表编号,或变量得 1。l_NTI名称表索引。Visual FoxPro 内部使用。l_offset表中得域编号。Visual FoxPro 内部使用。l_subs只用于变量,下标得编号(0 2)。l_sub1只用于变量,如果 l_subs 不就是 0,则为第一个下标。l_sub2只用于变量,如果 l_subs 就是 2,则为第二个下标。注意:检查 ev_type 中得
20、参数类型以帮助确定从 Value structure 接收得就是哪几个域就是良好得设计习惯。访问 FLL 库中参数示例下面示例使用 _StrCpy( ) 将字符型类型返回给 Visual FoxPro,那就是其两个字符型参数得串联。注意,尽管每个参数 Value 结构得句柄被用于操作内存以完成该串联,但改变内存得分配不影响通过值传递得 Visual FoxPro 参数。复制代码#include Example(ParamBlk *parm)/ 通过使用 #define 快捷方式使得 paramBlk 结构易于管理#define p0 (parm-p0、val)#define p1 (parm-
21、p1、val)/ 确保有足够得内存if (!_SetHandSize(p0、ev_handle, p0、ev_length + p1、ev_length) _Error(182); / 内存不足/ 锁定句柄_HLock(p0、ev_handle);_HLock(p1、ev_handle);/ 将句柄转换为指针并确保串就是由 null 作终止符(char *)_HandToPtr(p0、ev_handle)p0、ev_length = 0;(char *)_HandToPtr(p1、ev_handle)p1、ev_length = 0;/ 用 API 函数 _StrCpy 连接串_StrCpy(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VFP 帮助 FLL 资料
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。