0

私が構築している DLL 内から特定の関数呼び出しを公開することを防ぐことができるかどうかを理解するのに苦労しています。非表示にしたい関数呼び出しは、自分で作成した別の DLL に構築している sqlite3.dll によって公開される呼び出しです。sqlite3.dll は 5 つの関数を公開します。そのうちの 1 つはヘッダーで次のようになります。

SQLITE_API int SQLITE_STDCALL sqlite3_close(sqlite3*);

ここで使用されるマクロは、以前に次のように定義されています。

/*
** Provide the ability to override linkage features of the interface.
*/
#ifndef SQLITE_EXTERN
# define SQLITE_EXTERN extern
#endif
#ifndef SQLITE_API
# define SQLITE_API
#endif
#ifndef SQLITE_CDECL
# define SQLITE_CDECL
#endif
#ifndef SQLITE_STDCALL
# define SQLITE_STDCALL
#endif

現在、sqlite3.lib にリンクし、sqlite3.h (前のコード スニペットのソース) をインクルードして、sqlite3.dll をアプリケーションにビルドしています。

私は、これらのマクロをいじって、私が望むものを達成できるかもしれないことを理解しています.

私は自分のdllで関数を公開します:

/* module entry point */
int __declspec(dllexport) __stdcall load_properties(CAObjHandle context);

ビルドの出力で利用可能な関数を見ると、関数 + 5 つの関数が sqlite ライブラリから取得されます。公開されている sqlite のすべての関数は、上記の close() で示したものと同様の宣言構造を持っています。

sqlite 関数を非表示にする方法はありますか? 問題の原因は .lib ファイルですか? そのファイルは自動生成されたので、そこに何があるかわかりません。

4

1 に答える 1

1

私は答えを発見しました。sqlite3.dll が、コンパイラへのエクスポートのソースとして誤って指定されていました。sqlite3.dll から関数をエクスポートするディレクティブを削除すると、問題が修正されました。

于 2015-08-20T20:24:51.273 に答える