2010-07-08 11 views
25

Uso della ShellExecute documentation come riferimento:Come utilizzare Rundll32 per eseguire la funzione DLL?

corro quanto segue dalla riga di comando:

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

Ciò si traduce in un errore di eccezione.

non so cosa significa:

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

Ma nella descrizione, una maniglia (HWND), e un puntatore a una stringa con terminazione null (LPCTSTR), sono menzionati, ma è molto confuso.

Qualsiasi aiuto sarebbe molto apprezzato. Mi piacerebbe anche saperne di più, quindi qualsiasi riferimento (libro, collegamenti Web, ecc.) Sarebbe anche fantastico!

+0

Sarebbe utile se lei ha spiegato cosa si sta cercando di realizzare in quanto ci possono essere modi migliori di utilizzare RUNDLL32. Regrdless, non stai chiamando correttamente RUNDLL32. Ad esempio, i parametri devono essere separati da spazi (la virgola separa solo il punto di ingresso dalla DLL), hwnd e nShowCmd si aspettano valori interi, ecc. Vedere http://support.microsoft.com/kb/164787 per maggiori informazioni. –

+0

Sono una testa errante. Ho letto: http://vlaurie.com/computers2/Articles/rundll32.htm. Quindi ho iniziato a esaminare diversi file dll e ho trovato questo: http://msdn.microsoft.com/en-us/library/bb776426%28v=VS.85%29.aspx. Ho iniziato a esaminare le singole funzioni e mi chiedevo se potevano essere utilizzate con rundll32.exe. Ho scelto la funzione ShellExecute perché capisco cosa fa (apri una cartella). Sto principalmente cercando di imparare come funzionano queste cose (in MSDN). Non so nemmeno se sia C, C++, C#, ecc. – mike

risposta

24

Rundll32 supporta solo in esecuzione esportazioni DLL con la seguente firma:

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

non supporta l'esecuzione punti di ingresso arbitrari. Poiché ShellExecute non ha quella firma, accadranno chiaramente cose brutte.

INFO: Windows Rundll and Rundll32 Interface ha più informazioni sull'interfaccia rundll32.

Se si vuole fare l'equivelent di ShellExecute dalla riga di comando, basta usare iniziare:

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

Come faccio a sapere quali esportazioni DLL hanno la firma corretta? – mike

+5

Non si chiamerà Rundll32 con funzioni casuali. O è documentato che è possibile utilizzare Rundll32 (per installare, InstallHinfSection) o fornire l'esportazione autonomamente. – Michael

+0

Grazie, questo aiuta! – mike

Problemi correlati