如何用VC6编一个联接SQL2000数据库的句柄,并编译成.fll的格式,给VFP9.0调用,只要求一个简单的实例,大侠高手们,高台贵手一下!
创建用于VFP的动态库(FLL格式)
一、使用VC98创建FLL文件的步骤:
1. 打开VC98,并在VC中新建空项目(Win32 Dynamic-Link Library动态库)
2. 添加或编写源代码文件,如格式为*.C,不能用*.cpp表示的文件。参考例子Hello.c的内容如下:
#include
void hello(ParamBlk *parm) // the function definition
{
_PutStr("\nHello, World!\n"); //print the message
}
Example(ParamBlk *parm)
{
// 通过使用 #define 快捷方式使得 paramBlk 结构易于管理
#define p0 (parm->p[0].val)
#define p1 (parm->p[1].val)
// 确保有足够的内存
if (!_SetHandSize(p0.ev_handle, p0.ev_length + p1.ev_length))
_Error(182); // "内存不足"
// 锁定句柄
_HLock(p0.ev_handle);
_HLock(p1.ev_handle);
// 将句柄转换为指针并确保串是由 null 作终止符
((char *)_HandToPtr(p0.ev_handle))[p0.ev_length] = '\0';
((char *)_HandToPtr(p1.ev_handle))[p1.ev_length] = '\0';
// 用 API 函数 _StrCpy 连接串
_StrCpy((char *)_HandToPtr(p0.ev_handle) + p0.ev_length,
_HandToPtr(p1.ev_handle));
// 将已连接的串返回给 Visual FoxPro
_RetChar(_HandToPtr(p0.ev_handle));
// 解除句柄锁定
_HUnLock(p0.ev_handle);
_HUnLock(p1.ev_handle);
}
FoxInfo myFoxInfo[] = {
{"HELLO",(FPFI) hello, 0, ""},
{"STRCAT", Example, 2, "CC"},
};
FoxTable _FoxTable = {
(FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
其中红色部分为函数定义,可定义多个函数;而紫色部分为导出的函数说明(函数名,内部函数名,参数个数,参数类型),若有多个函数,则相应地要写几个。
3. 项目设置(很关键,设置不对会导致编译错误)
点击项目(Project)中<设置(Settings)>,
(1)在C++选项卡中,删除编译器开关参数中的 /GZ。
(2)在Link选项卡中,添加WINAPIMS.LIB和msvcrt.lib(建议msvcrt.lib放在最后)即可成功
二、使用VFP命令
在VC源代码文件中的格式如下:
_Execute(“命令”)
注意命令中变量的值与VC中的同名变量无关.
三、调试FLL:
可以在.C 源代码中使用_BreakPoint()命令启动调试器,然后,然后可逐语句进行调试。
1. .C 源代码中包含 _BreakPoint() 函数。
2. 启动调试器。
3. FoxPro 从调试器中启动。
4. 加载库并调用函数。
5. 逐句通过 C 源代码并随后返回到 FoxPro。
6. 退出 FoxPro。
7. 退出调试器。
四、在VFP中使用FLL动态库
启动 Visual FoxPro 程序后并发出 ' SET LIBRARY to < DLL 文件 >
使用函数与使用系统函数一样,没有两样。
本文难免有不妥之处,请来邮告知, 以便共同进步。来信请邮:498890448@qq.com.
2010-12-12
创建DLL函数(32位动态库DLL格式):
创建DLL格式的动态库,网络上介绍的相关资料很多,笔者不想多谈。注意,在利用VC开发并编译时,应使用__cdecl*,否则无法使用.
导出的函数应使用以下格式:
extern "C" __declspec(dllexport) int sy(int x, int y);
或extern "C" int __declspec(dllexport) sy(int x, int y);
导出符号 函数类型 函数名(参数类型名称)
什么叫fll,应该是dll吧。你新建一个dll项目,编写函数,把调用数据库的代码放进来,再把函数写在导出文件中,编译即可。
访问数据库可以用ado,也可以用dao。
至于vc++访问sql server,参考
http://wenku.baidu.com/link?url=_bDOarLhTZcnACuVvz2L2w1GYbYWQSHh0LeJAyT8IBaYTorF05MEVfYQu675Ek0LjoNpZa82CZVP0f2aZHGbGDPEXI2_7SgVg3MkziEG9nS
http://wenku.baidu.com/link?url=csK8xRWGpWpSfZPISoKzBf7ZoFg_YgdVeK47gxlmJxpJuIXTlhwDAfEQE6MCekox5f-p3rIQ1hLBYht2mp9tG1OcJKF_tFtjLc0ILdvI33G
http://www.yesky.com/277/1893277.shtml
我给你看一编文章:
创建用于VFP的动态库(FLL格式)
一、使用VC98创建FLL文件的步骤:
1. 打开VC98,并在VC中新建空项目(Win32 Dynamic-Link Library动态库)
2. 添加或编写源代码文件,如格式为*.C,不能用*.cpp表示的文件。参考例子Hello.c的内容如下:
#include
void hello(ParamBlk *parm) // the function definition
{
_PutStr("\nHello, World!\n"); //print the message
}
Example(ParamBlk *parm)
{
// 通过使用 #define 快捷方式使得 paramBlk 结构易于管理
#define p0 (parm->p[0].val)
#define p1 (parm->p[1].val)
// 确保有足够的内存
if (!_SetHandSize(p0.ev_handle, p0.ev_length + p1.ev_length))
_Error(182); // "内存不足"
// 锁定句柄
_HLock(p0.ev_handle);
_HLock(p1.ev_handle);
// 将句柄转换为指针并确保串是由 null 作终止符
((char *)_HandToPtr(p0.ev_handle))[p0.ev_length] = '\0';
((char *)_HandToPtr(p1.ev_handle))[p1.ev_length] = '\0';
// 用 API 函数 _StrCpy 连接串
_StrCpy((char *)_HandToPtr(p0.ev_handle) + p0.ev_length,
_HandToPtr(p1.ev_handle));
// 将已连接的串返回给 Visual FoxPro
_RetChar(_HandToPtr(p0.ev_handle));
// 解除句柄锁定
_HUnLock(p0.ev_handle);
_HUnLock(p1.ev_handle);
}
FoxInfo myFoxInfo[] = {
{"HELLO",(FPFI) hello, 0, ""},
{"STRCAT", Example, 2, "CC"},
};
FoxTable _FoxTable = {
(FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
其中红色部分为函数定义,可定义多个函数;而紫色部分为导出的函数说明(函数名,内部函数名,参数个数,参数类型),若有多个函数,则相应地要写几个。
3. 项目设置(很关键,设置不对会导致编译错误)
点击项目(Project)中<设置(Settings)>,
(1)在C++选项卡中,删除编译器开关参数中的 /GZ。
(2)在Link选项卡中,添加WINAPIMS.LIB和msvcrt.lib(建议msvcrt.lib放在最后)即可成功
二、使用VFP命令
在VC源代码文件中的格式如下:
_Execute(“命令”)
注意命令中变量的值与VC中的同名变量无关.
三、调试FLL:
可以在.C 源代码中使用_BreakPoint()命令启动调试器,然后,然后可逐语句进行调试。
1. .C 源代码中包含 _BreakPoint() 函数。
2. 启动调试器。
3. FoxPro 从调试器中启动。
4. 加载库并调用函数。
5. 逐句通过 C 源代码并随后返回到 FoxPro。
6. 退出 FoxPro。
7. 退出调试器。
四、在VFP中使用FLL动态库
启动 Visual FoxPro 程序后并发出 ' SET LIBRARY to < DLL 文件 >
使用函数与使用系统函数一样,没有两样。
本文难免有不妥之处,请来邮告知, 以便共同进步。来信请邮:498890448@qq.com.
2010-12-12
创建DLL函数(32位动态库DLL格式):
创建DLL格式的动态库,网络上介绍的相关资料很多,笔者不想多谈。注意,在利用VC开发并编译时,应使用__cdecl*,否则无法使用.
导出的函数应使用以下格式:
extern "C" __declspec(dllexport) int sy(int x, int y);
或extern "C" int __declspec(dllexport) sy(int x, int y);
导出符号 函数类型 函数名(参数类型名称)
hdfzcxcgfwgdff