0

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

如果该程序使用 .dll(不确定是否可能)而不是 .exe 运行,我该如何编写代码?

提前致谢。

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”函数。有许多网站专门列出Declare任意 Windows 函数的语法,因此通常不难找到正确的。

于 2009-10-02T01:52:24.653 回答
2

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

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

于 2009-10-02T02:04:16.340 回答