如何运行.dll程序?

时间:2009-10-02 01:50:22

标签: basic

我想使用BASIC语言使用Run("someProgram.exe")命令。这将打开第三个应用程序。

如果该程序使用.dll运行(不确定是否可能)不是.exe,我该怎么编码呢?

提前感谢。

2 个答案:

答案 0 :(得分: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”函数。有许多网站致力于列出任意窗口函数的Declare语法,因此通常很难找到正确的函数。

答案 1 :(得分:2)

如果不了解你的.dll的性质,很难回答。当然,没有办法简单地将你的dll放入一些线束并期望它只是运行。它必须是一个exe。您可以创建自己的shell / wrapper exe,它只是作为具有入口点的进程主机,然后在dll上触发方法。

我不确定这是否适合您的模型,但如果您处于可以要求这些dll包含实现接口的类的位置。说包含单个Run()方法的IRunnable。您可以创建一个接收dll作为命令行参数的exe,使用反射来查找IRunnable,然后加载该类并调用Run()。