Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 编程 » 嵌入式 SQL

 

在 Windows 中动态装载 DBLIB

使用安装目录的 SDK\C 子目录中的 esqldll.c 模块,从嵌入式 SQL 应用程序中动态装载 DBLIB,这样就无需链接到导入库。

前提条件

执行此任务没有前提条件。

上下文和注释

常用方法是将应用程序链接到包含所需函数定义的动态链接库 (DLL) 的静态导入库,而此任务是这一方法的替代方法。

可使用类似任务在 Unix 平台上动态装载 DBLIB。

 任务
  1. 应用程序必须调用 db_init_dll 才能装载 DBLIB DLL,而且必须调用 db_fini_dll 才能释放 DBLIB DLL。必须在调用数据库接口中的任何函数之前调用 db_init_dll,而且在调用 db_fini_dll 之后不能调用接口中的任何函数。

    您还必须调用 db_init 和 db_fini 库函数。

  2. 您必须在 EXEC SQL INCLUDE SQLCA 语句之前包含 esqldll.h 头文件或在嵌入式 SQL 程序中包含 sqlca.hesqldll.h 头文件包括 sqlca.h

  3. 必须定义一个 SQL OS 宏。sqlca.h 所包括的头文件 sqlos.h 会尝试确定适合的宏并对其进行定义。但是,平台和编译器的某些组合可能导致此操作失败。在这种情况下,您必须将 #define 添加到此文件的顶部,或者使用编译器选项进行定义。必须为 Windows 定义的宏如下所示。

    平台
    _SQL_OS_WINDOWS 所有 Windows 操作系统
  4. 编译 esqldll.c

  5. 将对象模块 esqldll.obj 与嵌入式 SQL 应用程序对象链接在一起,而不链接到导入库。

结果

运行嵌入式 SQL 应用程序时,DBLIB 接口 DLL 会动态装载。

可在 %SQLANYSAMP16%\SQLAnywhere\ESQLDynamicLoad 目录下找到说明如何动态装载接口库的示例程序。源代码在 sample.sqc 中。

以下示例编译 sample.sqc 并将其与 Windows 上 esqldll.c 的代码相关联。

sqlpp sample.sqc
cl sample.c %SQLANY16%\sdk\c\esqldll.c /I%SQLANY16%\sdk\include Advapi32.lib