2011-12-26 8 views
0

私はreflectionを使用して、vb.netのdll(アセンブリではなく、管理されていない、COMオブジェクトモデルなど)を動的に呼び出す必要があります。vb.netでのリフレクションによる非アセンブリ(管理されていない)dllのメソッドの呼び出し?

.NETアセンブリであるdllでメソッドを呼び出す方法がいくつかありますが、user32.dllやwinmm.dllのようなDLL内のメソッドを動的に呼び出す方法が見つかりませんでした。私はこれが晩年結束と呼ばれると信じていますか?

私が求めている理由は、多くの異なる機能のために外部ライブラリに依存する言語を構築しているからです。

例(この言語で私が構築しています):私はWINMM.DLLでmciSendStringの呼び出しのために通訳を構築する場合、どのように私はこれを処理するためにリフレクションを使用することができます

Declare Function mciSendStringA using "winmm.dll" (strCommand As String, strReturn As String, returnLength As Integer, blah As Integer) As Integer 

Declare Function WriteConsoleA using "kernel32.dll" (hConsoleOutput As Integer, lpBuffer As String, numberofcharstowrite as Integer, lpReserved as Integer) As Boolean 

?ユーザーが希望するdll /メソッドを参照できるようにします。

正しい方向にガイダンスを得ることはできますか?おそらく私は離れて理解することができるいくつかのVB.NETコードですか?

+0

は避けてください。 TypeBuilder.DefinePInvokeMethod()は器械的です。 –

答えて

0

アンマネージWin32ネイティブライブラリでリフレクションを使用しません。

代わりに、それらをロードし、管理されていない関数へのポインタを取得してアドレスで呼び出します。これは、C#でこれを行う方法です。詳細はあなたを食べるようになる、あなた自身のPInvokeのマーシャラーを実装しようと

http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx

+0

'SafeHandle'型(' IntPtr'ではなく)としてモジュールハンドルをラップし、 'ReleaseHandle'が' FreeLibrary'を呼び出す方が良いでしょう。 – bobbymcr

+0

実際、この記事では例を示します。http://msdn.microsoft.com/en-us/magazine/cc163716.aspx – bobbymcr

+0

Thanks Wiktor。私はその記事で提示されたC#コードをvb.netに変換しました。 – Dominick

関連する問題