如何使用Rundll32执行DLL函数?

时间:2010-07-08 19:49:19

标签: rundll32

使用ShellExecute documentation作为参考:

我从命令行运行以下命令:

C:\>RUNDLL32.EXE SHELL32.DLL,ShellExecute handle,"open","C:\Documents and Settings\admin\Desktop\tmp",NULL,NULL,SW_SHOWNORMAL

这会导致异常错误。

我不知道这意味着什么:

HINSTANCE ShellExecute(
  __in_opt  HWND hwnd,
  __in_opt  LPCTSTR lpOperation,
  __in      LPCTSTR lpFile,
  __in_opt  LPCTSTR lpParameters,
  __in_opt  LPCTSTR lpDirectory,
  __in      INT nShowCmd
);

但是在描述中,提到了句柄(HWND)和指向以空字符结尾的字符串(LPCTSTR)的指针,但它非常混乱。

非常感谢任何帮助。我还想了解更多,所以任何参考书(书籍,网站链接等)也会很棒!

1 个答案:

答案 0 :(得分:25)

Rundll32仅支持使用以下签名运行DLL导出:

void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);

它不支持运行任意入口点。由于ShellExecute没有该签名,因此显然会发生不好的事情。

INFO: Windows Rundll and Rundll32 Interface有关于rundll32接口的更多信息。

如果你想从命令行执行等效的ShellExecute,只需使用start:

C:\>start "C:\Documents and Settings\admin\Desktop\tmp"