2010-07-08 8 views
25

Uso de la ShellExecute documentation como referencia:¿Cómo se usa Rundll32 para ejecutar la función DLL?

I ejecute lo siguiente desde la línea de comandos:

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

Esto se traduce en un error de excepción.

No sé lo que esto 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 
); 

Pero en la descripción, un mango (HWND), y un puntero a una cadena terminada en cero (LPCTSTR), han sido citados, pero es muy confuso.

Cualquier ayuda sería muy apreciada. También me gustaría aprender más, ¡así que cualquier referencia (libro, enlaces web, etc.) también sería genial!

+0

Sería de gran ayuda si usted explicó lo que estamos tratando de lograr ya que puede haber formas mejores que el uso RUNDLL32. Regrdless, no estás llamando a RUNDLL32 correctamente. Por ejemplo, los parámetros deben estar separados por espacios (la coma solo separa el punto de entrada de la DLL), hwnd y nShowCmd esperan valores enteros, etc. Consulte http://support.microsoft.com/kb/164787 para obtener más información. –

+0

Soy una cabeza errante. Leí: http://vlaurie.com/computers2/Articles/rundll32.htm. Luego comencé a buscar en diferentes archivos dll y encontré esto: http://msdn.microsoft.com/en-us/library/bb776426%28v=VS.85%29.aspx. Empecé a ver las funciones individuales y me pregunté si podrían usarse con rundll32.exe. Elegí la función ShellExecute porque entiendo lo que hace (abrir una carpeta). Principalmente trato de aprender cómo funcionan estas cosas (en MSDN). Ni siquiera sé si son C, C++, C#, etc. – mike

Respuesta

24

Rundll32 sólo se admite la ejecución de las exportaciones DLL con la siguiente firma:

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

No es compatible con funcionamiento puntos de entrada arbitrarias. Como ShellExecute no tiene esa firma, claramente suceden cosas malas.

INFO: Windows Rundll and Rundll32 Interface tiene más información sobre la interfaz rundll32.

Si usted quiere hacer el equivelent de ShellExecute desde la línea de comandos, sólo tiene que utilizar comenzar:

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

¿Cómo puedo saber qué exportaciones de DLL tienen la firma adecuada? – mike

+5

No deberías estar llamando a Rundll32 con funciones aleatorias. O está documentado que puede usar Rundll32 (para instalar, InstallHinfSection) o puede exportar su auto. – Michael

+0

¡Gracias, eso ayuda! – mike

Cuestiones relacionadas