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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办