欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

进去吆喝下:vfp写的dll能够被vc调用

更新时间: 2014-01-05 02:27:38 责任编辑: Author_N1

 

进来吆喝下:VFP写的DLL能够被VC调用
如题。一时突发奇想,用MFC写个HTTP服务器,然后用VFP做个操作数据库的DLL,2者配合,装在自己的服务器上,居然成功了。

YY:从此以后,就不用依赖IIS和SQL还有ASP.net等高级高难度的玩意儿了。
以前就用VFP整理数据。每一期后台SQL数据先换成VFP,因为VFP中可以用VC写的正则表达式协助处理数据,方便高效,整理完毕后再换回SQL。现在貌似可以省一步了。
不过可惜的VFP不支持多线程,不能像SQL那样支持并发连接。原本是想用VFP写个后台服务程序,保持数据库连接,然后通过WINDOWS消息与HTTP服务线程通信。但因为不支持多线程并发连接,就用DLL了。原VFP写的DLL不能被VC调用。今天一想不对,COM不是说跨平台的吗?那应该可以,于是照着VB的方法写,居然成了。
VC中的调用方法(VFP工程名称vsm,OLEPUBLIC类名vData,即vsm.vData):
#import "vsm.dll"
using namespace vsm;
//test
vsm::IvdataPtr vsm; //VFP生成接口都小写的,vData变成了vadta
vsm.CreateInstance("vsm.vData");
_bstr_t vInfo;
_bstr_t vParam("s");
vInfo = vsm->Test2(vParam);//VFP原型 FUNCTION Test(txt as String),一定要用FUNCTION funcName(参数列表)这种形式
  MessageBox(0, vInfo,"OK", MB_OK);
//test

服务器启动
VFP服务启动,_VFP有hWnd
HTTP服务启动,根据窗口名找到_VFP有hWnd并记录之
收到HTTP服务请求,创建工作线程,若有数据请求,线程向_VFP的hWnd发送消息,发送的消息包括线程ID,共享内存句柄等(配合共享内存实现数据交换)
后台运行的VFP服务exe接收消息,并处理数据,处理完毕后调用VC写的DLL将处理结果写进共享内存,然后向HTTP工作线程发送消息表示完成<这一步不能用多线程解决,可能会阻塞>
HTTP服务完成输出,然后关闭线程。

关于并发,多连接等问题,VFP好像和SQLSERVER不是一回事。一脑子浆糊,搞不明白。

不过,发现,编译DLL时,数据库要设为包含,否则运行时提示不能存取文件,但表不用包含,而且路径也定死了。还好是自己的服务器,随便折腾。

我是不是很蛋疼?
--参考方法--
VFP 编写的 DLL 属于 COM 方式,文件要注册(regsvr32),这种 Dll 许多语言都可以开发,也都可以调用。能调用 COM 组件的开发工具都可以使用这种 Dll 
--参考方法--
是否非主流,这不好说
单反你还在微软的系统中工作,那么 COM 应用就少不了
--参考方法--
倒是VFP調用C#的DLL我至今都沒有成功
--参考方法--
怎么会认为是非主流呢?
微软给 vfp 的定位一直就是做中间层组件,做 COM 组件,提供数据处理接口才是 vfp 的主流应用方向。
仅因为 vfp 在提供快速数据处理功能的同时,也提供了实现前台界面的能力,才使得 vfp 可以不借助其他数据库也能完成简单的数据库应用。
与 C/C++/java/vb/delphi/C#/vb.net 等需要借助外部数据库才能实现数据库应用不同,自带数据库功能是 vfp 这一编程语言的特色之一。不过,vfp 自带的 DBC 数据库容器太鸡肋,没太大应用价值,不如仅用 dbf 自由表。vfp 的最大优势是使用其他数据库时,配合使用 vfp Cursor 的灵活、直观、快速的数据处理能力,vfp 如果没有这个其他语言无法超越的 cursor,早就没人用它了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:27:38
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/10064/
本文WWW.DOC100.NET DOC100.NET版权所有。