タイトル : Re^6: Declareステートメントで定義されたアンマネージdll関数呼出について 投稿日 : 2010/12/31(Fri) 10:47 投稿者 : テイラー
アドバイスありがとうございます。 > 根本的に,そのアンマネージDLLは複数の状態を持てるのですか? > > 例えば, > static int value = 0; > > __declspec(dllexport) int WINAPI GetValue () > { > return ++value; > } > というアンマネージCコードをDLLに仕立て上げて,ひとつのプロセスから複数回DllImport/Declare/LoadLibrary(Ex) APIによる呼び出しを行ったところで, > 毎回アンロード (LoadLibrary(Ex)使った場合のみFreeLibraryで可能) しない限り,GetValueの戻り値は増え続けます。 > > DLL自体が, > __declspec(dllexport) HANDLE WINAPI CreateValueHandle () > { > int * result = new int (); > *result = 0; > return (HANDLE)result; > } > > __declspec(dllexport) int WINAPI GetValue (HANDLE handle) > { > int * pointer_to_value = (int *)handle; > return ++*pointer_to_value; > } > > __declspec(dllexport) void WINAPI CloseValueHandle (HANDLE handle) > { > int * pointer_to_value = (int *)handle; > delete pointer_to_value; > } > のように複数の状態を持てる実装になっていない限り,いくらラッパー側で頑張っても単一状態しか持てないことにはかわりないですよ。 > # アンマネージ側が状態をSave/Restoreできるなら,それをハンドルとして使えますが。 VBから動的にdllのインスタンスをいくつも発生させるのは難しい可能性があるので、当面はdllそのものに手を加えようとしています。 可能性がないわけはないと思いますので、解決の方法が見えたらまたおじゃまします。 |