开发使用 DLL 中的函数的应用程序通常的做法是:将应用程序链接到包含所需函数定义的导入库。
本节介绍了在开发 SQL Anywhere 应用程序时不使用导入库的方法。可以使用安装目录的 SDK\C 子目录下的 esqldll.c 模块动态装载 DBLIB,而不必链接导入库。
可以使用类似的方法在 Unix 平台上动态装载 DBLIB。
您的程序必须调用 db_init_dll 才能装载 DLL,而且必须调用 db_fini_dll 才能释放 DLL。必须在调用数据库接口中的任何函数之前调用 db_init_dll,而且在调用 db_fini_dll 之后不能调用接口中的任何函数。
您还必须调用 db_init 和 db_fini 库函数。
您必须在 EXEC SQL INCLUDE SQLCA 语句之前使用 #include 将 esqldll.h 头文件包含进来或在嵌入式 SQL 程序中包含 #include <sqlca.h> 行。esqldll.h 头文件包括 sqlca.h。
必须定义一个 SQL OS 宏。sqlca.h 所包括的头文件 sqlos.h 会尝试确定适合的宏并对其进行定义。但是,平台和编译器的某些组合可能导致此操作失败。在这种情况下,您必须将 #define 添加到此文件的顶部,或者使用编译器选项进行定义。必须为 Windows 定义的宏如下所示。
宏 | 平台 |
---|---|
_SQL_OS_WINDOWS | 所有 Windows 操作系统 |
编译 esqldll.c。
将对象模块 esqldll.obj 与嵌入式 SQL 应用程序对象链接在一起,而不链接到导入库。
您可以在 samples-dir\SQLAnywhere\ESQLDynamicLoad 目录中找到说明如何动态装载接口库的示例程序。源代码在 sample.sqc 中。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |