1

Roguewaveライブラリを使用してC++からSybaseデータベースに接続しています。データベースオブジェクトが次のように構築されていることを理解しています。

  RWDBManager::database("accessLib", "", "", "", "", "XA=lrm_name");

http://www2.roguewave.com/support/docs/sourcepro/edition8/html/dbxaug/5-3.htmlによると

All arguments are of type RWCString. Note that establishing an XA connection to the Sybase CT database requires only two of the six database() arguments, as described here:

  accessLib

  The argument for the first parameter is the same as that which you provide for the non-XA connection.

  For static libraries, supply the string "SYBASE_CT".

  For shared libraries, supply the name of your shared access library, for example "libctl420d.so". 

理解できない:

コードでは、ライブラリで提供されているものを使用する必要がある場合、そのライブラリのヘッダーを含め、このライブラリのクラス/関数を使用し、プロジェクトのコンパイル中にLDLIBRARIESリストでこのライブラリを使用することに慣れています。ここの関数データベースにライブラリの名前が必要なのはなぜですか?#includeアプローチに対するこのアプローチの利点は何ですか。

それはいくつかの標準的な手法ですか?通常、これはどこで使用されますか?私は共有ライブラリを使用するプロジェクトに取り組んだことがあるので、リンクは静的に行われていませんでしたが、そのようなことはありませんでした。

ありがとう、

4

1 に答える 1

1

これはおそらく、dlopen()POSIXシステムのように、その名前と標準の呼び出しを使用してライブラリを動的にロードするためです。Windowsにも同等のものがありますが、そうだと思いますLoadLibrary()。このようなシステムを使用すると、ライブラリをロードして、そこからシンボルを取得できます。プラグインシステムなどを構築するのに非常に便利です。また、パフォーマンスを向上させるライブラリが存在する場合にのみ、それらを使用することもできます...

たとえばここを参照してください...

my2c

編集:

彼らがこのデザインを選ぶ理由として、彼らに尋ねる以外に、あなたは推測しなければなりません:)

私の推測:プラグインアーキテクチャでのDBドライバの保守が簡単:インストール、バージョンの切り替え、バイナリパッチの提供が簡単...

別の推測:ある種の内省/反省を実装する唯一の方法。

于 2011-02-07T12:42:18.630 に答える