瓜哥教你上手就赢,VFP专属FLL开发入门
作者:瓜哥,网名木瓜,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创建空的工程然后可以看到如下结构:添加一个代码文件
菜单 文件-新建 选择C++Source File 输入文件名 main
目前这是一个空的文件
5.把pro_ext.h 和winapims.lib两个文件拷到main.cpp所在位置的lib下(方便把自己的代码跟库区分)
注意看目录结构
6.修改配置
菜单 工程 设置
VC编译器的配置是包括debug版本和release版本,其中debug版本包含调试信息,release是用于发布的,所以两个配置都需要修改下
至此,工程的设置基本完成。
四、编写hello world程序
打开我们的main.cpp,输入如下代码
代码语言:javascript代码运行次数:0运行复制#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版本