Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-06-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Error al accesar una funcion en una DLL

Bueno..es mi primera vez con las DLL.
He creado una DLL con varios procedimientos y funciones hasta el momento me han funcionado bien, sin embargo he declarado algo muy simple y me aparece un error que no tengo idea porque sucede, me explico:

Código Delphi [-]
//esto esta declarado en la DLL
 
function AjustesActuales : string; stdCall;
begin
  Result := 'Com1,9600,8,none,1';                              
end;
 
exports
    AjustesActuales;
 
begin
end.

y lo llamo asi:

Código Delphi [-]
//La declaro en la aplicacion normal

function AjustesActuales: string; external 'ComScale.dll';
 
implementation
{$R *.dfm}
 
//Aqui la llamo desde una aplicacion normal
procedure TForm1.btnMuestraClick(Sender: TObject);
begin
  StatusBar1.Panels[0].Text := AjustesActuales;
end;

y este es el mensaje de error:

Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project UsaComScale.exe raised exception class EAccessViolation with message 'Access violation at address 00374A08 in module 'ComScale.dll'. Write of address 0042AF9C'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Agradesco su ayuda.
Responder Con Cita
  #2  
Antiguo 23-06-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Creo que olvidaste poner el "StdCall" en la "aplicaión normal". Así que cuando lo llamas no recibe los parámetros de la forma que espera, lo que se traduce en el error.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 23-06-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
ok, bueno la he redeclarado asi:

Código Delphi [-]
function AjustesActuales: string; stdcall; external 'ComScale.dll';

y ahora si la ejecuto solamente a ella y cierro el formulario todo bien.
Si ejecuto ademas otra funcion de la dll al cerrar el formulario me aparece este error:

Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project UsaComScale.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Gracias nuevamente por la ayuda.
Responder Con Cita
  #4  
Antiguo 23-06-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ignoro si es por eso, pero, me parece que no puedes usar "strings" como parámetros ni como resultados, sino es añadiendo una determinada "unidad" de Delphi, de cuyo nombre no puedo acordarme ahora. El caso es que podrías probar algo como esto:

Código Delphi [-]
function AjustesActuales : PChar; stdCall;
begin
  Result := 'Com1,9600,8,none,1';                              
end;

Y:

Código Delphi [-]
function AjustesActuales: PChar; stdcall; external 'ComScale.dll';
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 23-06-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Error común.
Responder Con Cita
  #6  
Antiguo 23-06-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Ok, anotado y comprobado, no usar string sino PChar.............pero.........
ya con el codigo que realmente debe de ir (el resultado es una cadena identica a la que anteriormente mostre)

Código Delphi [-]
function AjustesActuales : PChar; stdCall;
begin
  Result := PuertoS.Port + ',' + BaudRatetoStr(PuertoS.BaudRate) + ',' +
                                DataBitsToStr(PuertoS.DataBits) + ',' +
                                ParityToStr(PuertoS.Parity.Bits) + ',' +
                                StopBitstoStr(PuertoS.StopBits);
end;

PuertoS es una instancia de un Componente (TComPort) el cual ya fue creado (dinamicamente) antes de llamar a esta funcion. al compilar la dll me dice que son tipos incompatibles string y PChar ¿y 'ora?
Responder Con Cita
  #7  
Antiguo 23-06-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Algo como esto, quizás:

Código Delphi [-]
function AjustesActuales : PChar; stdCall;
begin
  Result := PChar(PuertoS.Port + ',' + BaudRatetoStr(PuertoS.BaudRate) + ',' +
                                DataBitsToStr(PuertoS.DataBits) + ',' +
                                ParityToStr(PuertoS.Parity.Bits) + ',' +
                                StopBitstoStr(PuertoS.StopBits));
end;
__________________
David Esperalta
www.decsoftutils.com
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error funcion login usuario en c# con SQL server Ariel03 .NET 2 20-02-2008 23:27:30
Error al crear una imagen en una funcion ilcapo C++ Builder 0 12-04-2007 21:12:07
Error con funcion astut Varios 4 17-09-2006 14:47:04
Error funcion mail() Andrea Martinez PHP 6 02-12-2004 16:00:34
Al accesar con usuario diferente da error. ElCherchu Conexión con bases de datos 0 04-06-2003 19:10:44


La franja horaria es GMT +2. Ahora son las 03:27:33.


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