- - PR -
アンマネージDLLの呼び出し
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-07-22 21:54
初めての書き込みです。
今後ともよろしくお願い致します。 VC6.0で作成したDLLを動的にDLLファイル名を取得して、C#から呼び出そうとしてしています。 [DllImport("DLL名")]のプラットフォーム呼び出しだとDLL名は、文字列定数でないと エラーになってしまい、どうしても文字列変数を設定できません。 VC6.0では「LoadLibrary」を使用すればよかったのですが・・・。 何か良い解決方法があるのでしょうか? ご教授の程よろしくお願い致します。 |
|
投稿日時: 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-25 09:47
みけさん 情報提供ありがとうございます。
早速、上記の方法でやって問題解決する事ができました。 ラッパー関数を定義して使うという方法があったのですね。 ありがとうございました。 |
1