いくつかの関数とグローバル変数を含む DLL を作成しました。次に、buildlib を使用してインポート ライブラリを作成しました。
.exp ファイルは次のとおりです。
CSC_FFSW.dll
_CSC_FFSW_B _CSC_FFSW_B data
_CSC_FFSW_DWork _CSC_FFSW_DWork data
_CSC_FFSW_M _CSC_FFSW_M data
_CSC_FFSW_U _CSC_FFSW_U data
_CSC_FFSW_Y _CSC_FFSW_Y data
_CSC_FFSW_initialize _CSC_FFSW_initialize
_CSC_FFSW_step0 _CSC_FFSW_step0
_CSC_FFSW_step1 _CSC_FFSW_step1
プログラムから DLL をインポートすると、グローバル変数 (CSC_FFSW_U など) を読み取ることができますが、それらを書き込もうとすると、セグメント違反例外が発生します。
インポート ライブラリを使用する代わりに、以下を使用して DLL からシンボルを手動でインポートしようとしました。
dllHandle = LoadLibrary("CSC_FFSW.dll");
myType* pCSC_FFSW_U = (myType*)GetProcAddress(dllHandle, "_CSC_FFSW_U");
...
etc.
このアプローチでは、変数に問題なく書き込むことができます。ただし、この方法は、手動でエラーが発生しやすい作業が必要になるため、あまり適切ではありません。
buildlib によって作成されたインポート ライブラリ内の変数への読み書きアクセスを可能にする必要がありますか? これを .exp ファイルでどのように指定すればよいですか?
どうもありがとう、
ミゲル