FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Conocer Nombre y Ruta de una dll
Un proceso puede conocer su nombre de varias formas. GetModuleFileName nos dá la ruta completa y nombre del proceso en curso, incluso si se ejecuta desde una dll. Pero ¿Como sabe una dll su propio nombre y la ruta donde está?
Saludos y gracias. |
#2
|
||||
|
||||
Puedes usar EnumProcessModules para recuperar la lista de modulos cargados dentro de un proceso combinadola con GetModuleFileName.
saludos
__________________
self.free; |
#3
|
||||
|
||||
Muchas gracias droguerman por tu interés y tu rápida respuesta. La idea que propones es interesante pero me pregunto si existe una forma más directa. Es decir, EnumProcessModules proporciona la lista de dll cargadas, a una dll concreta no le interesan las demás para conocer su nombre y ruta. Claro que es posible que el S.O. (sus APIs) no nos proporcione un método más directo....
Dicho de otra forma, ¿es posible conocer el hModule de una dll sin necesidad de enumerarlas todas?. Muchas gracias. Saludos. Última edición por escafandra fecha: 21-10-2008 a las 13:29:12. |
#4
|
||||
|
||||
...Bueno, pues si que es posible. El hModule de nuestra dll es la HINSTANCE con la que se carga... Publico la forma como lo he conseguido.
Código:
char* GetDllFileName(HINSTANCE hinst, char* Buffer, int SizeBuffer) { HANDLE hProcess; hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, GetCurrentProcessId()); if(hProcess) GetModuleFileNameEx(hProcess, hinst, Buffer, SizeBuffer-1); CloseHandle(hProcess); } |
#5
|
||||
|
||||
Solo por curiosidad escafndra; GetModuleFileName(hinst, Buffer, SizeBuffer-1); o talvez, aunque sea lo mismo; GetModuleFileName(GetModuleHandle(NULL), Buffer, MAX_PATH);
|
#6
|
||||
|
||||
Las DLL tambien tienen un HInstance con el cual puedes obtener el nombre del modulo. Cuando creas una DLL usando C se crea una función llamada DLLMain, la cual tiene como parámetro la instancia. El problema es que no se cual es el equivalente en delphi de esta función o si se implementa o no
__________________
self.free; |
#7
|
||||
|
||||
Si, tienes razón en parte cHackAll. GetModuleFileName(hinst, Buffer, SizeBuffer-1); funciona igual. Pero GetModuleFileName(GetModuleHandle(NULL), Buffer, MAX_PATH); me devuelve el nombre del proceso.exe y no el de la dll. Por eso descarté, en un principio ese método.
Estudiando la enumeración que me propuso droguerman y usando el debug descubrí que el hModule de la dll, que tanto buscaba, no era ni mas ni menos que la HINSTANCE de la dll y no me lo pensé mas, adapté el código que hice para la enumeración... Pero la solución más simple es, una vez más, la que propones: Código:
GetModuleFileName(hinst, Buffer, SizeBuffer-1); Saludos y Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
"nombre de archivo inválido" Error cuando la ruta es muy larga. | JuanErasmo | Windows | 6 | 21-04-2008 15:36:45 |
Conocer el nombre del servidor | Pablo Carlos | Redes | 4 | 07-03-2005 23:08:10 |
Conocer PrinterIndex a partir del nombre | Novás | Varios | 1 | 16-07-2004 18:26:14 |
Ruta y nombre de archivo INI | jfranco | Varios | 2 | 27-02-2004 16:44:23 |
Conocer el nombre de la aplicacion que se encuentra activa | cso2000 | Varios | 4 | 24-10-2003 02:28:14 |
|