0

いくつかの関数とグローバル変数を含む 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 ファイルでどのように指定すればよいですか?

どうもありがとう、

ミゲル

4

1 に答える 1