使用安装目录的 SDK\C 子目录中的 esqldll.c 模块,从嵌入式 SQL 应用程序中动态装载 DBLIB,这样就无需链接到导入库。
前提条件
执行此任务没有前提条件。
上下文和注释
常用方法是将应用程序链接到包含所需函数定义的动态链接库 (DLL) 的静态导入库,而此任务是这一方法的替代方法。
可使用类似任务在 Unix 平台上动态装载 DBLIB。
应用程序必须调用 db_init_dll 才能装载 DBLIB DLL,而且必须调用 db_fini_dll 才能释放 DBLIB DLL。必须在调用数据库接口中的任何函数之前调用 db_init_dll,而且在调用 db_fini_dll 之后不能调用接口中的任何函数。
您还必须调用 db_init 和 db_fini 库函数。
您必须在 EXEC SQL INCLUDE SQLCA 语句之前包含 esqldll.h 头文件或在嵌入式 SQL 程序中包含 sqlca.h。esqldll.h 头文件包括 sqlca.h。
必须定义一个 SQL OS 宏。sqlca.h 所包括的头文件 sqlos.h 会尝试确定适合的宏并对其进行定义。但是,平台和编译器的某些组合可能导致此操作失败。在这种情况下,您必须将 #define 添加到此文件的顶部,或者使用编译器选项进行定义。必须为 Windows 定义的宏如下所示。
宏 | 平台 |
---|---|
_SQL_OS_WINDOWS | 所有 Windows 操作系统 |
编译 esqldll.c。
将对象模块 esqldll.obj 与嵌入式 SQL 应用程序对象链接在一起,而不链接到导入库。
例
可在 %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 |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |