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 20-11-2006
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
Hola

siempres que crees alguna dll , o intentes llamar a alguna funcion que se encuentra en una dll , no puedes usar tipos strings , has de usar pchars.


Código Delphi [-]
function TripleDes(dato,contrasenia : pchar;accion:boolean):string; stdcall;

y para llamar a la funcion , puedes forzar a pchar .


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
memo2.Text := TripleDes(pchar(memo1.Text),pchar(edit1.text),true);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo2.Text := TripleDes(pchar(memo1.Text),pchar(edit1.text),false);
end;

Última edición por tefots fecha: 20-11-2006 a las 16:47:28.
Responder Con Cita
  #2  
Antiguo 20-11-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Intente lo que me comentaste usar Pchar en vez de string y me sigue tirando error pero esta ves me tira Acces violation at address 00401C66 in module 'Project1.exe'. Write of address 003809D4

¿que podra ser?
Responder Con Cita
  #3  
Antiguo 20-11-2006
avmm2004 avmm2004 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Santa cruz de Tenerife, Islas Canarias
Posts: 500
Poder: 19
avmm2004 Va por buen camino
Utiliza shortstring en vez de Pchar o strings y no obstante utiliza la unit Sharemem como primera unit de tu dll y de tu programa llamador.
De resto debe de funcionarte bien, por lo menos a mi siguiendo esas reglas no tengo problemas.
Responder Con Cita
  #4  
Antiguo 20-11-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
gracias por el dato avmm2004 pero ahun me sigue tirando error de memoria intentare probarlo en otra pc para descartar.
Responder Con Cita
  #5  
Antiguo 21-11-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
hola de nuevo realice pruebas en otra pc e incluso desintale el windows xp y coloque windows 2000 y sigue el problema.

Para hacer mas simple cree una dll:
Código Delphi [-]
library Project2;

uses
  SysUtils,
  Classes;

{$R *.res}

function sumar(a,b:shortstring):string;stdcall;
begin
Result:= IntToSTr(StrToInt(a)+StrToInt(b));
end;

Exports sumar;
begin
end.

y una aplicacion que suma usando la DLL:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function sumar(a,b:shortstring):string; stdcall; external 'Project2.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption :=  sumar(edit1.Text,edit2.Text);
end;

end.

pero al cliquear en el botón realiza la suma pero coloca un cartel de error:
Invalid pointer operation

Por lo visto hay algo basico que hago mal
Espero que alguien me tire un cable por favor
Responder Con Cita
  #6  
Antiguo 21-11-2006
avmm2004 avmm2004 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Santa cruz de Tenerife, Islas Canarias
Posts: 500
Poder: 19
avmm2004 Va por buen camino
El parámetro que devuleve la función debe ser no string sino shortstring y te repito, utiliza Sharemem la primera de todas en tu sentencia uses en la dll y el programa llamador. Los problemas te vienen por el uso de string y no shortsring.

Pd: Si lo que quieres es sumar dos numeros pasele integer y devuelve integer.(en el ejemplo, claro) veras que si no utilzas string desaparece el error. Los strings es mejor usarlos como te digo, a mi me funciona bien.
Responder Con Cita
  #7  
Antiguo 22-11-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Muchas gracias avmm2004 y disculpa mi ignorancia habia pasado de alto tambien Sharemem
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
creación de un XML jmlifi Providers 2 10-01-2006 15:22:27
creacion armando OOP 9 28-10-2005 20:29:37
Problema Creacion-Cancelacion Registros Maury Manosalva OOP 3 20-09-2005 23:18:32
Problema con la creación de Indices apicito Firebird e Interbase 3 20-05-2005 07:22:04
problema con la creacion de informes Mayorlin .NET 2 22-07-2004 19:32:24


La franja horaria es GMT +2. Ahora son las 16:46:11.


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