瓜哥教我VS2015开发FLL,VFP混合C语言怎么样?

加菲猫的VFP 2022-03-10 15:13:14

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

1.使用向导创建win32项目,为了跟vc6区分,这个放在了D盘

这一步要选择类型为dll,空项目

然后再项目上点右键添加一个代码文件:

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

然后把代码复制过来,然后修改项目配置:


同样,也要修改release的版本的配置


另外,VS2008以上版本的调试,需要手动指定,如下图:
这里可以点右边的箭头找到VFP9.exe的位置

此时,配置完成,可以按F5直接运行开始调试,在要需要设置断点的代码按下F9,运行到这里就会转到调试状态。

VS2015生成发行版本,同样是生成->批生成,选择x86的release版本即可

最终VS2015的项目结构如下


与VC6的目录结构不同,多了一层项目文件夹
其他版本其实都差不多,可以参照这两个版本的配置。

创建FLL项目总结:
1.创建标准的DLL空工程
2.复制VFP两个文件到自己的工程(实际上如果你熟练使用后,可以把头文件和库文件复制到VC默认的include和lib文件夹,这样不用每个项目去复制了。)
3.修改配置,关键是修改动态连接C运行库 /MD和 调用约定 __fastcall
4.修改调试的方式,即默认启动VFP,在VFP里我们手动调用DLL

六.用一个完整功能函数进一步了解FLL开发
上面只是FLL基本框架,代码部分需要学习C/C++语法才可以,不明白的地方就网上搜一下。

FLL的核心是需要一个全局变量 _FoxTable ,它在pro_ext.h中定义,winapims.lib中声明,需要你自己编写它的实体,

FoxTable的定义如下:

这个结构体声明了你这个FLL有多少个函数,函数的地址在哪里,即FoxInfo结构

所以,在这个代码上面,定义了FoxInfo数组:


FoxInfo的定义如下:

funcName:vfp调用时的函数名字
function: C中的函数地址(函数名)
parmCount:参数的个数
parmTypes:每个参数的类型
对于这些更加详细的介绍,可以参阅VFP的帮助文档:

能够被VFP调用的C函数,标准格式如下:

void 函数名(ParamBlk* parm)
{
}

函数需要接收一个ParamBlk类型的指针,本身不能有返回值,返回VFP有特定的几个函数_RetXXX开头的函数,在头文件中有声明:

ParamBlk是一个变长数组结构体


其中pCount指明了参数有几个,即FoxParameter p[]多少个
FoxParameter是一个联合体,VFP中以值传递时,我们需要用Value访问,如果VFP是以引用传递时,需要用Locator访问

下面以再添加一个函数为例演示接收参数和返回结果。
我们在VFP端输入一个整型参数和一个字符参数,FLL返回两者连接后的结果:
VFP调用为 IntAndStr(123,”test”) 返回结果是 123test

1.先添加一个C函数和函数列表

这里演示了VFP调用名字跟C中函数名不同的用法,因为C的函数名最终都编译为地址,用什么名字都无所谓,FoxInfo结构第一个即VFP端函数名字,第二个是C端的函数名,第三个2 表示此函数接收两个参数,最后一个“IC”分别表示,第一个参数为I只接收整型,第二个参数C只接受字符型,如果你在VFP端传递了不符合要求的类型,在VFP端就会报错,参数错误。


现在来写具体代码:

void test2(ParamBlk* parm)
{
    //获取整型参数
    int   p1=parm->p[0].val.ev_long;

    //获取字符型参数
    int len=parm->p[1].val.ev_length;//字符串参数的长度
    //C的字符串是以0结尾,而VFP的字符串并不一定是0结果,所以要处理下
    //先设置长度以容纳0,然后修改
    _SetHandSize(parm->p[1].val.ev_handle,len+1);
    char* p2=(char*)_HandToPtr(parm->p[1].val.ev_handle);//获取字符串参数的指针

    p2[len]='\0';

    
    //调用windows api wsprintf连接两个数据
    char buffer[1024];
    wsprintf(buffer,"%d%s",p1,p2);

    _RetChar(buffer); //把字符串结果返回给VFP
    
}

参数的获取主要使用Value结构,只有字符型,需要注意用句柄转换成C指针,还要保证大小 。按F5运行,VFP中就可以调用了:

开发VFP扩展库,需要的基本功能就这些,而具体的每种类型数据的读写,VFP的帮助中写的列详细,具体用到时,查下帮助就可以了。

更多资料:http://www.sn58.cn/

...全文
340 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
MW_BO 2022-04-12
  • 打赏
  • 举报
回复 1

木瓜大侠,顶顶有名 好多受益于他的作品

内容概要:本文围绕单相统一功率因数变流器的控制技术展开深入研究,提出并实现了基于不平衡d-q坐标系的控制器设计方案,旨在提升单相电压源逆变器(VSI)或交直变流器在统一功率因数模式下的运行性能。研究采用同步旋转参考坐标系下的控制策略,有效解决了单相系统中功率波动与电流畸变等问题,增强了系统的动态响应能力、稳态精度及抗干扰性。通过Simulink仿真平台构建完整的系统模型,对控制算法进行了全面验证,涵盖启动过程、负载突变、电网扰动等多种工况,充分展示了该方法的可行性与优越性。同时,文中提供了详细的仿真资源获取途径,便于读者复现与拓展研究。; 适合人群:具备电力电子、自动控制及电力系统等相关专业知识背景,从事新能源发电、微电网、电能质量治理、变流器控制等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于单相逆变器实现高功率因数并网控制的技术开发与优化;②为弱电网环境下变流器稳定运行控制策略的研究提供仿真基础与技术支撑;③服务于高校相关课程教学、科研课题攻关及实际工程项目中的控制器设计与验证工作。; 阅读建议:建议读者结合所提供的Simulink仿真模型进行动手实践,重点掌握d-q坐标变换、电流环设计、PI参数整定等关键环节,并尝试将该方法推广至其他类型的单相电力电子系统中,进一步深化对同步参考坐标系下控制理论的理解与应用。
内容概要:本文围绕690V直驱风机网侧逆变器的阻抗建模与稳定性分析展开,基于Simulink平台实现仿真研究,属于博士论文复现类工作。研究重点在于直驱风机并网系统中网侧逆变器的小信号阻抗建模,通过构建其正负序阻抗模型,深入分析其在弱电网条件下的交互稳定性问题。内容涵盖阻抗建模理论、小信号扫频辨识方法的仿真实现,并通过仿真手段验证系统在不同电网强度下的稳定裕度,揭示潜在的宽频带振荡风险及其形成机理。该资源提供完整的Matlab/Simulink代码与模型,有助于研究人员系统掌握新能源并网系统的稳定性分析方法与技术细节。; 适合人群:具备电力电子、电力系统自动化或新能源并网等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源发电、并网控制与稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习并复现直驱风机等新能源发电系统的序阻抗建模方法;② 掌握利用Simulink进行小信号扫频以辨识系统阻抗特性并评估稳定性的关键技术;③ 深入理解弱电网条件下并网逆变器的稳定性问题、振荡机理及锁相环、电流控制器等关键环节对系统稳定性的影响。; 阅读建议:学习者应结合所提供的Simulink模型与配套代码,逐步操作并理解各功能模块的设计原理,重点关注控制环路对阻抗特性的作用,通过调整系统参数进行对比仿真,以深化对理论知识的理解并提升实际工程问题的分析与解决能力。

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧