Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Problemas con una dll de c++

Hola.
Me han pasado una libreria de hecha en c++ y cuando ejecuto la aplicación para acceder a ella me da un 'access violation'. El caso que este mismo codigo le funciona a la persona que realizo la libreria.

Este es el codigo
Código Delphi [-]

unit PruebaDLL;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
function funcionDePrueba(parametro1, nBytes : Integer): Integer;cdecl;


var
  Form1: TForm1;
  miArray : packed array [1..10] of Byte;

implementation

{$R *.dfm}
function funcionDePrueba(parametro1, nBytes : Integer):Integer;cdecl external 'MonitorLib.dll';


procedure TForm1.FormCreate(Sender: TObject);
begin
  funcionDePrueba(5, 20);
end;

end.

Tambien he probado con stdcall y nada.

¿Alguien sabe que me puede faltar? ¿Alguna idea?

Gracias.

Última edición por liser fecha: 16-09-2008 a las 13:14:23.
Responder Con Cita
  #2  
Antiguo 16-09-2008
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
Hola liser pues te falta lo más importante, el nombre de la función.
Sería así:

Código Delphi [-]
function funcionDePrueba(parametro1, nBytes : Integer):Integer;stdcall; external 'MonitorLib.dll' name 'funcionDePrueba';

implementation
...

Salu2
Responder Con Cita
  #3  
Antiguo 16-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Muchas gracias Khronos pero eso tambien lo he provado, ten en cuenta que use 'cdecl' en vez de 'stdcall'.
Como yo comente, esto mismo le compila a la persona que realizo en la libreria en el mismo PC, creo que me debe faltar 'algo' externo al código, pero no se que es.
Responder Con Cita
  #4  
Antiguo 16-09-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Como dice Khronos te falta el nombre de la funcion en la dll, que no es lo mismo que el nombre de tu funcion.

Prueba asi:

Código Delphi [-]

implementation

function funcionDePrueba; external 'MonitorLib.dll' name 'NombredeLaFuncion';

Observa que modifique la que esta en la implementacion

.
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 16-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Probandolo como me dices me da el siguiente mensaje 'la aplicación no se ha podido iniciar correctamente'.
Lo he probado en Pc's que tienen instalado el visual studio y si que funciona perfectamente mi codigo original.
Responder Con Cita
  #6  
Antiguo 16-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Me imagino (aunque no lo puedo aceverar hasta ver la DLL), que requiera el framework o de otra libreria... que tal si subes la DLL para analizarla?
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #7  
Antiguo 16-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Desgraciadamente, necesito permiso para colgar la libreria, de todas maneras ahora mismo pruebo con el framework
Responder Con Cita
  #8  
Antiguo 16-09-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Cita:
Empezado por liser Ver Mensaje
Probandolo como me dices me da el siguiente mensaje 'la aplicación no se ha podido iniciar correctamente'.
Lo he probado en Pc's que tienen instalado el visual studio y si que funciona perfectamente mi codigo original.
Por lo que dices, entonces el problema no es como la estas llamando, sino las dependencias de la libreria
__________________
[Crandel]
Responder Con Cita
  #9  
Antiguo 17-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Nada, paso la libreria por si la podeis hechar un vistazo, es un rar dentro de un zip, por que se me pasaba un pelin de tamaño para subirla.
Archivos Adjuntos
Tipo de Archivo: zip MonitorLib.zip (22,3 KB, 6 visitas)
Responder Con Cita
  #10  
Antiguo 17-09-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Por lo menos en mi maquina falta la dll dwmapi.dll.

No se en que habran compilado esa dll pero me parece que en una maquina con windows vista o XP actualizada con algun paquete nuevo (posiblemente service pack 3)
__________________
[Crandel]
Responder Con Cita
  #11  
Antiguo 17-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Gracias, algo es algo, ya intentare informarme. Cuando consiga algo lo digo
Responder Con Cita
  #12  
Antiguo 23-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Bueno, después de mucho probar, cambiando en el compilador de c las opciones de linkado (eso es lo que me han dicho), funciono la dichosa librería, ahora me encuentro con otro problema.

La función que tomo de la librería

Código Delphi [-]
function monitorNotificarMensaje(Buffer: Array  of Byte ;
                                   nBytes: Word     ): integer;cdecl;
Cuando la llamo y le paso un valor (en este caso 2)

Código Delphi [-]
Numero:= monitorNotificarMensaje (MiArray,2);

Me devuelve siempre como si nBytes tuviera el valor 1.

También probé cambiado Word por Longword , integer, a ver si entendía algo.

¿Alguna ayuda?
Responder Con Cita
  #13  
Antiguo 24-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Habiendo seguido el hilo solo puedo asegurar que estas haciendo las cosas a ciegas, el que te dio la libreria deberia haberte dado tambien las declaraciones de los métodos exportados para que sepas como exportar dichos metodos de la forma correcta, me resulta muy heterodoxo que iteres en dichas declaraciones, asi no conseguiras grandes resultados.

Tambien deberias subir la nueva DLL compilada o lo que tengas pues asi como la dejaste en un anterior post no puedemos ayudarte facilmente.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #14  
Antiguo 24-09-2008
liser liser is offline
Miembro
 
Registrado: feb 2006
Ubicación: torrejon(madrid)
Posts: 19
Poder: 0
liser Va por buen camino
Pues he cambiado 'directiva de alineaióni' a {$A1} y me ha funcionado, pero no se realmente lo que he hecho. ¿Alguien me puede decir donde encontrar informacion sobre esto? No encuentro nada en el foro.

Gracias por todo
Responder Con Cita
  #15  
Antiguo 25-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
 {$A1}if LoadLibrary('MonitorLib.dll') = 0 then
  MessageBox(0, 'Cómo ayudar si ni carga???', nil, 0);
end;
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:13:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi