Welcome
admin
admin

2025-05-10 17:07:22

世界杯cctv
1764 538

作者:瓜哥,网名木瓜,myfll(通用扩展库)作者,很多人都得益于他的FLL类库,自myfll之后,他又做了myimg(图像库),foxjson(json解析库),fws(CGI库),是位名副其实的技术大拿,猫猫也在瓜哥的帮助下受益良多。现在瓜哥也在狐友会社群里面活跃,社群每月直播分享会即将启动。

Visual FoxPro 动态连接库(FLL)实际上是包含对 VFP API 调用的DLL。 可以使用C或者C++编写,目前MS VC系列开发工具,都是同时支持C和C++语法的,而FLL的接口只支持C语法,所以开发时接口部分需要遵循C约定,而具体实现代码则不分C或者C++,本文是写给希望使用VC开发VFP扩展库入门教程。

开发工具的选择准备文件用向导创建FLL工程编写hello world函数编译调试与发布用一个完整功能函数进一步了解FLL开发

一、开发工具选择

做任何事情都需要选择适合自己的工具,首先是VFP端,直接就9.0 7423了,不再赘述。这里主要介绍下C/C++工具。

Visual Studio 6.0 (VC6.0) 这是早期最主要的开发工具,好处是开发出来的FLL能兼容WinXP甚至更早的Win98,因为它的运行库是msvcrt.dll,这个库是windows的一部分,不用额外发布,缺点是win8以上开发困难,兼容性太差,特别是现在普遍用的win10和11是没法调试的,不过网上有介绍可以修改配置的方式运行,可以自行研究。

Visual Studio 2003 (VC7.1) 这是VFP9本身的开发工具,它的运行库是msvcr71.dll,所以它是我们编写的VFP程序必需发布的DLL之一,是理想的开发工具,myfll发布早期还是VFP7,所以为了保持兼容vfp6和vfp7一直用vc6.0而没有采用此版本的原因。

VS2008 / VS2012 / VS2015 等后续版本 这些版本对于C和C++的语法支持更加完善,特别是如果你想使用网上的多开源库,特别是基于C++代码写的库,VC6和VC7.1根本无法编译通过,这些反而能更好的支持,唯一缺点就是你还要附带发布msvcrXX.dll,基中的xx表示80,90等等

其他工具 可以使用多编译器配置的C-FREE、Code Blocks等。

二.准备文件

开发FLL需要两个文件,pro_ext.h 和winapims.lib ,这两个文件在VFP的sample/api文件夹下面:

三.用向导创建FLL工程

VC6篇

打开向导,选择动态库工程,为项目创建个名字 flltest

2. 创建空的工程

然后可以看到如下结构: 添加一个代码文件 菜单 文件-新建 选择C++Source File 输入文件名 main 目前这是一个空的文件

5.把pro_ext.h 和winapims.lib两个文件拷到main.cpp所在位置的lib下(方便把自己的代码跟库区分)

注意看目录结构

6.修改配置 菜单 工程 设置

VC编译器的配置是包括debug版本和release版本,其中debug版本包含调试信息,release是用于发布的,所以两个配置都需要修改下

至此,工程的设置基本完成。

四、编写hello world程序 打开我们的main.cpp,输入如下代码

#include

//引入vfp库

#include "lib/pro_ext.h"

#pragma comment(lib,"lib/winapims.lib")

void test(ParamBlk* parm)

{

_PutStr("hello world");

}

extern "C"

{

//VFP可调用的函数列表

FoxInfo funclist[] =

{

{"test", (FPFI) test, 0, ""},

};

//接入点 _FoxTable

FoxTable _FoxTable = { (FoxTable *)0, sizeof(funclist)/sizeof(FoxInfo), funclist };

};

这些代码,可以先复制,以便编译通过。

五.编译调试与发布

代码无误的情况下,按F5键开始运行,就会跳出如下窗口 点brows找到vfp9.exe就可以了

在vfp窗口,输入命令set library to 打开fll库,调用函数test(),就完成了。

这里需要注意的是,vc6调用vfp9后的默认当前位置在项目位置,而生成的FLL是在 debug文件夹,所以,打开fll的命令带上了路径。 如果你的VFP设置了固定路径,那么这个命令你也需要绝对路径 set library to c:\flltest\debug\flltest.dll 这种方式打开,建议把VFP的固定路径关掉,使用相对路径。

还有个情况需要说明,这里为什么不是flltest.FLL,事实上无论是FLL还是dll只是文件扩展名的区别,本质都是一个dll,只是扩展名为fll的时候,vfp代码可以少打 .dll四个字符,文件名可以你随意更改。

调试:

如同VFP一样,在需要设置断点的地方,按下F9,则打上标记,运行到这行代码的时候如下图:

发布:

默认debug编译的dll包含调试信息,正式发布时需要生成 release版本,可以点击菜单 组建->批组建

点击全部生成,就可以了。 生成的目录结构如下: 这是debug版本

这是release版本

更多资料:www.sn58.cn