tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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そのものに手を加えようとしています。

可能性がないわけはないと思いますので、解決の方法が見えたらまたおじゃまします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。