lhgletter
2015-06-06 08:59
采纳率: 80%
浏览 2.1k
已采纳

如何用VC6编一个联接SQL2000数据库的句柄,并编译成.fll的格式,给VFP9.0调用!

如何用VC6编一个联接SQL2000数据库的句柄,并编译成.fll的格式,给VFP9.0调用,只要求一个简单的实例,大侠高手们,高台贵手一下!

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • lhg1094460152 2015-06-06 15:59
    已采纳

    创建用于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);
    导出符号 函数类型 函数名(参数类型名称)

    已采纳该答案
    打赏 评论
  • threenewbee 2015-06-06 09:04

    什么叫fll,应该是dll吧。你新建一个dll项目,编写函数,把调用数据库的代码放进来,再把函数写在导出文件中,编译即可。
    访问数据库可以用ado,也可以用dao。

    打赏 评论
  • threenewbee 2015-06-06 09:05
  • lhgletter 2015-06-06 09:06

    我给你看一编文章:
    创建用于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);
    导出符号 函数类型 函数名(参数类型名称)

    打赏 评论
  • weixin_28823297 2015-06-07 05:40

    hdfzcxcgfwgdff

    打赏 评论

相关推荐 更多相似问题