Как использовать Rundll32 для выполнения DLL-функции?
Используя документацию 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
Rundll32 поддерживает только экспорт DLL-экспорта со следующей подписью:
void CALLBACK
EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
Он не поддерживает запуск произвольных точек входа. Поскольку у ShellExecute нет этой подписи, очевидно, что плохие вещи произойдут.
INFO: интерфейс Windows Rundll и Rundll32 содержит дополнительную информацию о интерфейсе rundll32.
Если вы хотите сделать equivelent из ShellExecute из командной строки, просто используйте start:
C:\>start "C:\Documents and Settings\admin\Desktop\tmp"