初期化や終了処理を記述できます。
extern "C" BOOL WINAPI DllMain ( HINSTANCE const instance, // handle to DLL module DWORD const reason, // reason for calling function LPVOID const reserved); // reserved
関数が装飾名で公開されます。
__declspec( dllexport ) declaratordllexport、dllimport | MSDN
これは次のように利用します。
__declspec( dllexport ) void func();
__declspec( dllimport ) declaratordllexport、dllimport | MSDN
使用するDLLがVisual Studioのプロジェクトから作成したものならば、そのプロジェクトを参照に追加することで使用できるようになります。その他の方法で作成した場合、共有ライブラリとして使用するにはコンパイル時に、
の2つが、DLL以外に必要となります。
外部から呼び出せる関数が1つも存在しないと、インポートライブラリ (.lib) は作成されません。
インポートライブラリ (.lib) が提供されていないならば、.dllから作成できます。windows - How to generate an import library (LIB-file) from a DLL? - Stack Overflow
まずdumpbinで、エクスポートされたすべての定義をファイルに出力します。
dumpbin /exports target.dll > exports.txt
最初にLIBRARY DLL名
、2行目にEXPORTS
の記述をした、DEFファイルを作成します。Exporting from a DLL Using DEF Files | Microsoft Learn
echo LIBRARY DllName > target.def
echo EXPORTS >> target.def
DEFファイルに、最初に出力したファイルから関数定義部分だけを追記します。
for /f "skip=19 tokens=4" %A in (exports.txt) do echo %A >> target.def
最後にlibで、用意したDEFファイルからインポート ライブラリを作成します。
lib /def:target.def /out:target.lib /machine:x86
このとき64bitを対象とするならば、最後は/machine:x64とします。