ライブラリをコンパイルすると、disturve() への未解決のリンクが存在するため、これは問題です。代わりに、ライブラリにメイン モジュール内の関数を呼び出す必要がある場合は、ライブラリ内のスタブ関数へのポインタを用意し、実行時にメイン モジュールからライブラリへの初期化呼び出しでこれらのポインタを設定することをお勧めします。この方法は、商用製品の「コールバック」関数でよく使用されます。コードの例を次に示します。
library.h で:
typedef bool (*pbWMC)(DCwfile *, unc);
// stub functions for uninitialized pointers
static bool StubbWMC(DCwfile *df, unc uch);
// variables set by Init()
static pbWMC WriteMacroChar;
library.cpp で:
// callback functions
pbWMC DCmacr::WriteMacroChar = StubbWMC;
// stub functions for uninitialized function pointers
bool DCmacr::StubbWMC(DCwfile *df, unc uch)
{
return false;
}
// initializer called from main module
void DCmacr::InitMacroModule(DCwfile *df, pbWMC fwmc)
{
if (df)
DestFile = df;
if (fwmc)
WriteMacroChar = fwmc;
}
メインmodule.cppで:
// call to initializer
DCmacr::InitMacroModule(wf, WriteMacroChar);
// function called by library
bool HTMwr::WriteMacroChar(DCwfile *df, unc uch)
{
HTMwfile *wf = (HTMwfile *) df;
if (uch == 183) { // bullet
wf->putSpec(uch);
return true;
}
return false;
}
この設計により、ライブラリの呼び出しごとに異なるコールバック関数を指定できるようになり、コードが完全にモジュール化されます。C++ を使用しますが、C と同じ設計で機能します。HTH!