2010-07-08 3 views
25

Использование ShellExecute documentation в качестве ссылки:Как использовать Rundll32 для выполнения DLL-функции?

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

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), упоминаются, но очень смущает.

Любая помощь была бы принята с благодарностью. Я также хотел бы узнать больше, поэтому любые ссылки (книги, веб-ссылки и т. Д.) Также были бы замечательными!

+0

Было бы полезно, если бы вы объяснили, что вы пытаетесь достичь, так как там может быть лучше, чем при использовании способов RUNDLL32. Regrdless, вы неправильно вызываете RUNDLL32. Например, параметры должны быть разделены пробелами (запятая только разделяет точку входа из DLL), hwnd и nShowCmd ожидают целые значения и т. Д. Дополнительную информацию см. На http://support.microsoft.com/kb/164787. –

+0

Я блуждающая голова. Я читал: http://vlaurie.com/computers2/Articles/rundll32.htm. Затем я начал искать разные файлы dll и нашел это: http://msdn.microsoft.com/en-us/library/bb776426%28v=VS.85%29.aspx. Я начал смотреть на отдельные функции и задавался вопросом, можно ли их использовать с rundll32.exe. Я выбрал функцию ShellExecute, потому что я понимаю, что она делает (откройте папку). Я в основном стараюсь узнать, как это работает (в MSDN). Я даже не знаю, если это C, C++, C# и т. Д. – mike

ответ

24

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

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

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

INFO: Windows Rundll and Rundll32 Interface имеет дополнительную информацию о интерфейсе rundll32.

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

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

Как узнать, какая DLL-экспорт имеет правильную подпись? – mike

+5

Вы не будете называть Rundll32 со случайными функциями. Либо задокументировано, что вы можете использовать Rundll32 (для установки, InstallHinfSection) или предоставить экспорт самостоятельно. – Michael

+0

Спасибо, что помогает! – mike

 Смежные вопросы

  • Нет связанных вопросов^_^