![]() |
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. |
Puedes usar EnumProcessModules para recuperar la lista de modulos cargados dentro de un proceso combinadola con GetModuleFileName.
saludos |
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. |
...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) |
Solo por curiosidad escafndra; GetModuleFileName(hinst, Buffer, SizeBuffer-1); o talvez, aunque sea lo mismo; GetModuleFileName(GetModuleHandle(NULL), Buffer, MAX_PATH); :confused:
|
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
|
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);Cita:
Saludos y Gracias. |
| La franja horaria es GMT +2. Ahora son las 11:31:55. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi