- PR -

アンマネージDLLの呼び出し

1
投稿者投稿内容
オーウェン
会議室デビュー日: 2002/07/22
投稿数: 2
投稿日時: 2002-07-22 21:54
初めての書き込みです。
今後ともよろしくお願い致します。

VC6.0で作成したDLLを動的にDLLファイル名を取得して、C#から呼び出そうとしてしています。
[DllImport("DLL名")]のプラットフォーム呼び出しだとDLL名は、文字列定数でないと
エラーになってしまい、どうしても文字列変数を設定できません。
VC6.0では「LoadLibrary」を使用すればよかったのですが・・・。
何か良い解決方法があるのでしょうか?

ご教授の程よろしくお願い致します。
みけ
会議室デビュー日: 2002/07/25
投稿数: 14
投稿日時: 2002-07-25 01:41
VC++で作ったプラグインのようなDLLを動的によびだしたいっていうことですよね。
僕も、昔VB6.0で同じ悩みを抱えました。

そのときの解決法がそのままつかえそうですので・・・

少し回りくどいやり方になってしまいますが
VC++で、DLLを動的呼び出しするためのラッパー関数が定義されたDLLをつくるというのはどうでしょう?

引数として、動的ロードしたいDLLの名前と、呼び出したい関数に渡す引数を受け取る関数を実装したDLLをVC++で作成します。
その関数から、動的ロードしたい DLL を LoadLibrary で呼び出し、目的の関数のアドレスをGetProcAddress で取得し、関数をコールした後、FreeLibrary すると言うものです。

// Wrapper.DLL 実装(VC++)
int WINAPI Function1_Helper( char *pstrDllName )
{
HINSTANCE hInstance = ::LoadLibrary( pstrDllName );
FARPROC fp = ::GetProcAddress( hInstance, "Function1" );
fp();
::FreeLibrary( hInstance );
}

// C#
[DllImport("Wrapper.DLL")
public extern static void Function1_Helper( String strDllName );

というかんじになります。
オーウェン
会議室デビュー日: 2002/07/22
投稿数: 2
投稿日時: 2002-07-25 09:47
みけさん 情報提供ありがとうございます。

早速、上記の方法でやって問題解決する事ができました。
ラッパー関数を定義して使うという方法があったのですね。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)