| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Andresito Invitado
|
Publicado: Dom 30 Oct, 2005 10:59 pm Asunto: Problema con Dll |
|
|
Estoy haciendo un programita que necesita la carga de una dll llamada "MiDll.dll"
La cargo con LoadLibrary()
m_hDll=NULL;
m_hDll=LoadLibrary("MiDll.dll");
El problema que tengo es que siempre necesito que la dichosa Dll esté en la carpeta de la aplicación
Con ImpLib he hecho una libreria a partir de la dll.
Hay alguna manera de hacer que no se necesite tener la dll en la carpeta de la aplicación ?
Saludos al foro |
|
| Volver arriba |
|
 |
Andresito Invitado
|
Publicado: Lun 31 Oct, 2005 2:42 pm Asunto: |
|
|
Acabo de recorrerme todo el foro buscando algo que pueda ser aplicable en este caso y no he encontrado nada en 6 páginas que me ha devuelto una búsqueda
Espero que Leo o algún otro maestro pueda hecharme una mano en este problemilla
Gracias por adelantado |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 31 Oct, 2005 4:02 pm Asunto: |
|
|
Has registrado la DLL?
el comando para hacerlo, al menos en Windows es regsvr32 "ruta_dll".
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
Andresito Invitado
|
Publicado: Lun 31 Oct, 2005 4:19 pm Asunto: |
|
|
Gracias por contestarme Buildero
La he registrado pero sigo igual
Lo que esto buscando es alguna forma de cargar la Dll como un archivo de recursos o algo similar para que forme parte del exe |
|
| Volver arriba |
|
 |
Jumanor Lt


Registrado: 28 Feb 2003Mensajes: 91Ubicación: tacna-Peru
|
Publicado: Lun 31 Oct, 2005 5:09 pm Asunto: |
|
|
Haber si el lib esta incluido en tu proyecto la busqueda del dll(enlace estatico ) es del siguiente modo:
Directorio donde se encuentra el exe
Directorio system de windows
Directorio de windows
Directorios espeificados en el path
Pero podria crear una archivo de recursos https://cppbuilder.es/viewtopic.php?t=771
aunque necesariamente habria q extraerlo a algun directorio .
Aunque no entiendo xq cargas dinamicamente y usas implib para obtener el lib
Para la carga dinamica solo es necesario el dll (Supongo q la busqueda se realiza del mismo modo q un enlace estatic)
Saludos _________________ Es dificil decir q es imposible xq el sueño de ayer es la esperanza de hoy y la realidad d mañana |
|
| Volver arriba |
|
 |
Andresito Invitado
|
Publicado: Lun 31 Oct, 2005 8:36 pm Asunto: |
|
|
Hola
Lo he solucionado de la siguiente forma a falta de saber si Leo cree que existe otra forma mejor de hacerlo que seguro a el se le ocurre
He creado un archivo de recursos llamado recursos.rc y dentro de el he puesto la siguiente línea
MI_DLL RCDATA "MiDll.dll"
En la Unit1 he puesto lo siguiente:
unsigned char ArrayDll[65536]; // Tamaño de la Dll
FILE *pa;
TResourceStream(0,"MI_DLL",RT_RCDATA).Read(ArrayDll,65536);
chdir("C:\\MiProyecto\\");
pa = fopen("MiDll.dll","w+b");
fwrite(ArrayDll,65536,1,pa);
fclose(pa);
Con esto consigo primeramente que la Dll forme parte del ejecutable y cuando este arranque se crea la Dll en la carpeta MiProyecto
Solo me falta añadir un par de líneas mas para comprobar si ya existe el archivo MiDll.dll, siendo en este caso innecesario la creación del archivo en la ruta especificada
Con gusto admitiria una solución mas adecuada a mi problema
Un saludo al foro |
|
| Volver arriba |
|
 |
Jumanor Lt


Registrado: 28 Feb 2003Mensajes: 91Ubicación: tacna-Peru
|
Publicado: Mar 01 Nov, 2005 3:35 am Asunto: |
|
|
Holas:
Me parece mas comodo extraer el dll del siguiente modo :
if(!FileExists("MiDll.dll"))
TResourceStream(0, "MI_DLL", RT_RCDATA).SaveToFile("MiDll.dll");
Saludos _________________ Es dificil decir q es imposible xq el sueño de ayer es la esperanza de hoy y la realidad d mañana |
|
| Volver arriba |
|
 |
Andresito Invitado
|
Publicado: Mar 01 Nov, 2005 11:02 am Asunto: |
|
|
Completamente de acuerdo, es mucho mas elegante y además comprueba la existencia de la Dll
Se me escapa un ultimo detalle y es que en caso de no existir la dll en la carpeta C:\Windows\System32\ copiarla en esa carpeta
El problema que se me plantea es que la mayoria de los windows se instalan en C:\Windows, pero en ocasiones si no me equivoco Windows 2000 se instala en la carpeta C:\WinNt y en este caso la carpeta donde poner la dll seria C:\WinNt\System32
Hay alguna manera de saber donde está instalado windows ?
Muchisimas gracias por los consejos |
|
| Volver arriba |
|
 |
Andresito Invitado
|
Publicado: Mar 01 Nov, 2005 11:05 am Asunto: |
|
|
Perdon por mi torpeza
Lo acabo de encontrar en este foro
char WinDir[MAX_PATH +1];
WinDir[MAX_PATH] = '\0';
GetWindowsDirectory(WinDir,MAX_PATH);
Gracias de nuevo |
|
| Volver arriba |
|
 |
|