elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como Llamar a una Dll desde otra
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como Llamar a una Dll desde otra  (Leído 5,935 veces)
zeui

Desconectado Desconectado

Mensajes: 9

mira que sabes mas que yo... y? me importa? no :D


Ver Perfil
como Llamar a una Dll desde otra
« en: 26 Julio 2010, 22:46 pm »

hola, bueno. emm... resulta que no soy bueno programando con Cpp, nunca e aprendido a usarlo bien y menos llegue a aprender como integrar Api's dentro de mi codigo.
pero ahora tengo este requisito para poder hacer llamada a la Dll que llamaria a otra Dll en ruby ( que es el lenguaje que estoy usando hace un buen tiempo )

he estado intentando y hasta el momento no e logrado mucho.

cree una dll con la funcion "suma"
al llamarla desde ruby funciona a la perfeccion.

pero cree otra dll, la que llama a la funcion "suma" de la dll anterior
y al llamarla desde ruby simplemente esta dll no puede me tira false al usar la funcion LoadLibrary para llamar a la Dll.

que error puedo estar comentiendo?, me ayudan. porfavor :S


En línea

[take all around]
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: como Llamar a una Dll desde otra
« Respuesta #1 en: 27 Julio 2010, 12:44 pm »

LoadLibrary carga una DLL en memoria. Comproba que el nombre sea correcto y este en la ruta de busqueda:

LoadLibrary.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
zeui

Desconectado Desconectado

Mensajes: 9

mira que sabes mas que yo... y? me importa? no :D


Ver Perfil
Re: como Llamar a una Dll desde otra
« Respuesta #2 en: 28 Julio 2010, 04:51 am »

si se como llamar a una dll, pero no me a funcionado. la simple funcion no me va a servir, como dije. no tengo muchos conocimientos de C++.

estoy acostumbrado a usar Ruby, dinamico, simple, hermoso, pero lamentablemente mucho mas lento...

nesecito mas que una simple "funcion"

seria mucha molestia si pido un codigo ejemplo :X?
En línea

[take all around]
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: como Llamar a una Dll desde otra
« Respuesta #3 en: 28 Julio 2010, 09:01 am »

Ya te deje codigo de ejemplo en el enlace anterior que no debes haber visitado.
Pone TU codigo que no funciona y antes que nada usa GetLastError para ver que error devuelve la funcion.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
zeui

Desconectado Desconectado

Mensajes: 9

mira que sabes mas que yo... y? me importa? no :D


Ver Perfil
Re: como Llamar a una Dll desde otra
« Respuesta #4 en: 29 Julio 2010, 05:37 am »

mi codigo de la dll que llama a otra es este.

main.cpp
Código:

/* dllmain.cpp */

#include "dll.h"
#include <windows.h>
#include <cstdlib>
#include <iostream>



/*----------------------------*/
/*         llamada dll        */
/*----------------------------*/
extern "C" _declspec(dllexport)
int suma_int(int a, int b)
{    
     typedef int (WINAPI*cfunc1)(int, int);
     cfunc1 ConexionDLL1;          
    
     int res = 0;    
     HINSTANCE hLib;        
     hLib = LoadLibrary("Jmysql2");
 
     if(hLib!=0)
     {
          ConexionDLL1 = (int (__stdcall *) (int, int)) GetProcAddress(hLib,"suma");
          res = ConexionDLL1(a, b);                                        
     }
     else
     {
         res = 2;
         FreeLibrary(hLib);
     }  
    
     return res;            
}




BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}



dll.h

Código:
/* dll.h */

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


#endif /* _DLL_H_ */



esta dll llama a la funcion suma de la dll "Jmysql2" ( obviamente solo suma, es para probar si me funciona... )  (en load library intente con poner la extensión dll y sin dll, vi codigos de ejemplo con ambas opciones)

al probar el codigo (desde ruby) la funcion suma de "Jmysql2" esta funciona perfectamente, pero mi problema radica mas en el codigo que e puesto aqui arriba donde intento cargar una dll dentro de otra.

p.s: respecto al sitio de msdn, estoy revisando los ejemplos posteados por usuarios. pido perdon, en ningun momento revise ese lugar ...

EDIT:---
tal como dije arriba, no se usar C++ X.x, ayuda por favor...
« Última modificación: 29 Julio 2010, 06:13 am por zeui » En línea

[take all around]
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: como Llamar a una Dll desde otra
« Respuesta #5 en: 29 Julio 2010, 09:25 am »

En lugar de intentar descagar una DLL que no se cargo, cosa que no tiene sentido, en caso de error pone esto:

Código
  1. res = 2;
  2. DWORD err = GetLastError();
  3. res = err; //es solo para depurarlo mas comodamente
  4.  

Depura el programa y fijate que valor toma err.

PD. ¿Probaste copiando la DLL Jmysql2.dll en el path de TU DLL? Sino copiala en WINDOWS\SYSTEM32.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
LLamar los Metodos de un Midlet desde otra clase
Java
o__Near__o 6 7,755 Último mensaje 13 Julio 2011, 22:10 pm
por o__Near__o
BLOQUEAC UNA CARPETA/ Y COMO HACERLE DESDE OTRA RUTA
Scripting
GEORGEFRT 3 3,578 Último mensaje 17 Noviembre 2011, 23:02 pm
por Eleкtro
Llamar metodo de una clase desde otra en asp.net
Desarrollo Web
jabedoya 0 2,604 Último mensaje 26 Mayo 2014, 18:56 pm
por jabedoya
Como puedo llamar un txt desde un botón después de gravado ?
.NET (C#, VB.NET, ASP)
luis456 2 2,413 Último mensaje 14 Noviembre 2014, 13:49 pm
por luis456
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines