瓜哥教你上手就赢,VFP专属FLL开发入门

本文是关于使用Visual Studio创建Visual FoxPro(VFP)扩展库FLL的入门教程。作者瓜哥介绍了从选择开发工具,如VC6.0、VC2003、VS2008等,到准备必要的文件,再到使用向导创建FLL工程,编写Hello World程序,以及编译、调试和发布的全过程。文章详细讲解了每个步骤,并提供了调试和发布时的注意事项。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

作者:瓜哥,网名木瓜,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扩展库入门教程。

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

一、开发工具选择

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

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

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

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

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

二.准备文件

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

三.用向导创建FLL工程

VC6篇

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


2. 创建空的工程

  1. 然后可以看到如下结构:
  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 <windows.h>

//引入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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值