首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >瓜哥教你上手就赢,VFP专属FLL开发入门

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

作者头像
加菲猫的VFP
发布2022-04-07 19:43:37
发布2022-04-07 19:43:37
1.1K00
代码可运行
举报
文章被收录于专栏:加菲猫的VFP加菲猫的VFP
运行总次数:0
代码可运行

作者:瓜哥,网名木瓜,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
  1. 创建空的工程
  1. 然后可以看到如下结构:
  1. 添加一个代码文件 菜单 文件-新建 选择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 <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版本

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、开发工具选择
  • 二.准备文件
  • 三.用向导创建FLL工程
  • 五.编译调试与发布
    • 调试:
    • 发布:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档