2009-10-02 69 views
0

我想使用Run("someProgram.exe")命令使用BASIC語言。這將打開第三個應用程序。如何運行.dll程序?

如果該程序使用.dll文件(不知道是否可能)不.EXE,我怎樣才能代碼,運行?

在此先感謝。

+0

你不「跑」的DLL,他們只是可以動態鏈接,並從你的代碼 – 2013-04-08 19:17:48

+0

笑@問題稱爲庫。 – 2017-04-11 16:51:17

回答

4

如果你想在命令行中執行的DLL功能,用途:如果它

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

Rundll.exe您導出函數需要精確匹配(C)簽名

注不,對於將要發生的事情沒有定義,但你可能會崩潰。從類VB調用任意函數的正常例程是使用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」 功能。有很多網站致力於列出用於任意窗口函數的Declare語法,所以通常很難找到正確的語法。

+1

Rundll.exe將用於從調用的DLL導出函數(匹配某個簽名) - 這是不是真正的問題是什麼之後 – 2009-10-02 01:56:59

+1

1800:其實,我覺得你錯了。他要求將DLL作爲應用程序執行,這就是Rundll允許的。顯然,他也可以用語言加載它來調用它,但這不是他要求的。 – 2009-10-02 02:00:44

+1

它仍然不是從dll中調用導出函數的一般方法。只有當你的導出函數的簽名相匹配:無效回調 EntryPointW(HWND HWND,HINSTANCE HINST,LPWSTR lpszCmdLine, INT的nCmdShow); 將它的工作 – 2009-10-02 02:04:07

2

它很難回答不理解您的.dll的性質。當然,沒有辦法簡單地將你的dll插入一些線束並期望它運行。它必須是一個exe文件。你可以創建自己的shell/wrapper exe,它只是作爲一個具有入口點的進程主機,然後在dll上激發方法。

我不知道這是否會適合你的模式,但如果你是在那裏你可以需要的位置這些DLL包含實現接口的類。說包含一個Run()方法的IRunnable。您可以創建一個接收dll作爲命令行參數的exe文件,使用反射來查找IRunnable,然後加載該類並調用Run()。