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 サーバ プログラミング » Embedded SQL

 

Windows での DBLIB の動的ロード

インポートライブラリとリンクしなくてもよいように、インストールディレクトリの SDK\C サブフォルダにある esqldll.c モジュールを使用して、Embedded 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. Embedded SQL プログラムでは、EXEC SQL INCLUDE SQLCA 文の前に esqldll.h ヘッダファイルをインクルードするか、sqlca.h をインクルードしてください。esqldll.h ヘッダファイルは sqlca.h をインクルードします。

  3. SQL の OS マクロを定義します。sqlca.h にインクルードされるヘッダファイル sqlos.h は、適切なマクロを特定して、定義しようとします。しかし、プラットフォームとコンパイラの組み合わせによっては、定義に失敗することがあります。その場合は、このヘッダファイルの先頭に #define を追加するか、コンパイラオプションを使用してマクロを定義してください。Windows で定義が必要となるマクロを次に示します。

    マクロ プラットフォーム
    _SQL_OS_WINDOWS すべての Windows オペレーティングシステム
  4. esqldll.c をコンパイルします。

  5. インポートライブラリにリンクする代わりに、オブジェクトモジュール esqldll.obj を Embedded SQL アプリケーションオブジェクトにリンクします。

結果

Embedded SQL アプリケーションを実行すると、DBLIB インタフェース DLL が動的にロードされます。

インタフェースライブラリを動的にロードする方法を示すサンプルプログラムは、%SQLANYSAMP16%\SQLAnywhere\ESQLDynamicLoad ディレクトリにあります。ソースコードは sample.sqc にあります。

次の例では、Windows で esqldll.c からのコードを使用して、sample.sqc をコンパイルしてリンクします。

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