Как использовать Rundll32 для выполнения функции DLL? - PullRequest
28 голосов
/ 08 июля 2010

Использование документации ShellExecute в качестве справки:

Я запускаю следующее из командной строки:

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 Ответ

25 голосов
/ 08 июля 2010

Rundll32 поддерживает только запуск экспорта DLL со следующей подписью:

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

Он не поддерживает запуск произвольных точек входа.Поскольку ShellExecute не имеет этой подписи, очевидно, что произойдет что-то плохое.

ИНФОРМАЦИЯ: Интерфейс Windows Rundll и Rundll32 имеет больше информации об интерфейсе rundll32.

Если вы хотите сделать эквивалентное ShellExecute из командной строки, просто используйте start:

C:\>start "C:\Documents and Settings\admin\Desktop\tmp"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...