如何运行.dll程序?

问题描述:

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

如果该程序使用.dll文件(不知道是否可能)不.EXE,我怎样才能代码,运行?

在此先感谢。

+0

你不“跑”的DLL,他们只是可以动态链接,并从你的代码 – 2013-04-08 19:17:48

+0

笑@问题称为库。 – 2017-04-11 16:51:17

如果你想在命令行中执行的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

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

我不知道这是否会适合你的模式,但如果你是在那里你可以需要的位置这些DLL包含实现接口的类。说包含一个Run()方法的IRunnable。您可以创建一个接收dll作为命令行参数的exe文件,使用反射来查找IRunnable,然后加载该类并调用Run()。