0

Run("someProgram.exe")BASIC言語でコマンドを使いたい。これにより、3 つ目のアプリケーション プログラムが開きます。

そのプログラムが.exeではなく.dll(可能かどうかわからない)を使用して実行されている場合、どのようにコーディングできますか?

前もって感謝します。

4

2 に答える 2

4

コマンド ラインから DLL 関数を実行する場合は、Rundll.exeを使用します。

エクスポートされた関数は、(C) 署名と正確に一致する必要があることに注意してください。

void CALLBACK EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);

そうでない場合、何が起こるかは未定義ですが、おそらくクラッシュします。クラス VB の dll から任意の関数を呼び出す通常のルーチンは、Declareステートメントを使用することです。コンパイル時に呼び出す関数のシグネチャを知っている必要があります。

例えば:

Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
Function GetUser()
   Dim RetVal As Integer
   Dim UserName As String
   Dim Buffer As String
   Buffer = New String(CChar(" "), 25)
   RetVal = GetUserName(Buffer, 25)
   UserName = Strings.Left(Buffer, InStr(Buffer, Chr(0)) - 1)
   MsgBox(UserName)
End Function

このコードは、advapi32.dll から "GetUserNameA" 関数を呼び出します。任意の Windows 関数の構文を一覧表示するサイトが多数あるDeclareため、通常、正しい構文を見つけることは難しくありません。

于 2009-10-02T01:52:24.653 に答える
2

.dll の性質を理解せずに答えるのは難しいです。もちろん、DLL を何らかのハーネスに単純に挿入して実行することを期待する方法はありません。そのためにはexeである必要があります。エントリ ポイントを持つプロセス ホストとして機能し、dll でメソッドを起動する独自のシェル/ラッパー exe を作成できます。

これがあなたのモデルに適合するかどうかはわかりませんが、これらの dll にインターフェイスを実装するクラスを含める必要がある場合。単一の Run() メソッドを含む IRunnable とします。コマンド ライン引数として dll を受け取り、リフレクションを使用して IRunnable を見つけ、そのクラスをロードして Run() を呼び出す exe を作成できます。

于 2009-10-02T02:04:16.340 に答える