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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2019
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Usar cadena en librería DLL para D7 y RX10 error en tipo de datos al pasar y recibir

Lo que estoy realizando es usar una librería DLL compilada en D7 y RX10, pasando una cadena e uniéndola con otra devolviendo la cadena nueva, uso un mismo ejecutable que lo compilo con D7 y RX10 lo ejecuto, y con algunos tipos de datos no recibe ni devuelve la cadena enviada

Cuál es la forma correcta de usar cadenas como parámetros en DLL

Gracias

Este es el resultado de la ejecución

Cadena enviada "Esta es una prueba"

Resultado en ejecutando en Rx10
DLL Rx10
Cadena_ Cadena PAnsiChar Esta es una prueba
Cadena_P Cadena PChar Esta es una prueba
Cadena_w Cadena PWideChar Esta es una prueba
Cadena_AS
Cadena_S Cadena string Esta es una prueba

DLL D7
Cadena_ Cadena PAnsiChar Esta es una prueba
Cadena_P 慃敤慮倠桃牡䔠
Cadena_w 慃敤慮倠楗敤桃牡䔠瑳⁡獥甠慮瀠畲扥a
Cadena_AS
Cadena_S 慃敤慮猠牴湩⁧Esta es u⠀ü⢚ü



Resultado en ejecutando en D7
DLL Rx10
Cadena_ Cadena PAnsiChar Esta es una prueba
Cadena_P C
Cadena_w Cadena PWideChar ?????????
Cadena_AS C
Cadena_S C

DLL D7
Cadena_ Cadena PAnsiChar Esta es una prueba
Cadena_P Cadena PChar Esta es una prueba
Cadena_w ?????????????
Cadena_AS Cadena PAnsiString Esta es una prueba
Cadena_S Cadena string Esta es una prueba





Código de pruebas




Dll en D7

Código Delphi [-]library Cadena2libD7; uses Classes, Windows, SysUtils , Dialogs ; {$R *.res} function Cadena_7(Cadena: PAnsiChar): PAnsiChar; stdcall; begin ShowMessage(string(Cadena)); Result := PAnsiChar(AnsiString('Cadena PAnsiChar '+(trim(string(Cadena))))); end; function Cadena_AS7(Cadena: PAnsiString): PAnsiString; stdcall; begin ShowMessage(string(AnsiString(Cadena))); Result := PAnsiString(('Cadena PAnsiString '+Trim(string(AnsiString(Cadena))))); end; function Cadena_P7(Cadena: PChar): PChar; stdcall; begin ShowMessage(string(AnsiString(Cadena))); Result := PChar(('Cadena PChar '+(string(AnsiString(Cadena))))); end; function Cadena_W7(Cadena: PWideChar): PWideChar; stdcall; begin ShowMessage(string(AnsiString(Cadena))); Result := PWideChar(('Cadena PWideChar '+Trim(string(AnsiString(Cadena))))); end; function Cadena_S7(Cadena: string): string; stdcall; begin ShowMessage(Cadena); Result := 'Cadena string '+Cadena; end; exports Cadena_7, Cadena_P7, Cadena_S7, Cadena_W7, Cadena_AS7; begin end.



DLL en Rx10

Código Delphi [-]library Cadena2libRx10; uses Classes, Windows, SysUtils ,Vcl.Dialogs; {$R *.res} function Cadena_(Cadena: PAnsiChar): PAnsiChar; stdcall; begin ShowMessage(string(Cadena)); Result := PAnsiChar(AnsiString('Cadena PAnsiChar '+(trim(string(Cadena))))); end; function Cadena_AS(Cadena: PAnsiString): PAnsiString; stdcall; begin ShowMessage(string(AnsiString(Cadena))); Result := PAnsiString(('Cadena PAnsiString '+Trim(string(AnsiString(Cadena))))); end; function Cadena_P(Cadena: PChar): PChar; stdcall; begin ShowMessage(string(AnsiString(Cadena))); Result := PChar(('Cadena PChar '+(string(AnsiString(Cadena))))); end; function Cadena_W(Cadena: PWideChar): PWideChar; stdcall; begin ShowMessage(string(AnsiString(Cadena))); Result := PWideChar(('Cadena PWideChar '+Trim(string(AnsiString(Cadena))))); end; function Cadena_S(Cadena: string): string; stdcall; begin ShowMessage(Cadena); Result := 'Cadena string '+Cadena; end; exports Cadena_, Cadena_P, Cadena_S, Cadena_W, Cadena_AS; begin end.





Programa de prueba ejecutado en D7 y Rx10



Código Delphi [-]unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Clipbrd; type TForm1 = class(TForm) Button2: TButton; Memo1: TMemo; Memo2: TMemo; Button1: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function Cadena_7(Cadena: PAnsiChar): PAnsiChar; stdcall external 'Cadena2libD7.dll' function Cadena_P7(Cadena: PChar): PChar; stdcall external 'Cadena2libD7.dll' function Cadena_W7(Cadena: PWideChar): PWideChar; stdcall external 'Cadena2libD7.dll' function Cadena_S7(Cadena: string): string; stdcall external 'Cadena2libD7.dll' function Cadena_AS7(Cadena: PAnsiString): PAnsiString; stdcall external 'Cadena2libD7.dll' function Cadena_(Cadena: PAnsiChar): PAnsiChar; stdcall external 'Cadena2libRx10.dll' function Cadena_P(Cadena: PChar): PChar; stdcall external 'Cadena2libRx10.dll' function Cadena_W(Cadena: PWideChar): PWideChar; stdcall external 'Cadena2libRx10.dll' function Cadena_S(Cadena: string): string; stdcall external 'Cadena2libRx10.dll' function Cadena_AS(Cadena: PAnsiString): PAnsiString; stdcall external 'Cadena2libRx10.dll' procedure TForm1.Button2Click(Sender: TObject); begin try Memo2.Lines.Add('Cadena_ '+Cadena_(PAnsiChar(AnsiString(trim(memo1.lines.text))))); except end; try Memo2.Lines.Add('Cadena_P '+StrPas(Cadena_P(PChar(String(trim(memo1.lines.text)))))); except end; try Memo2.Lines.Add('Cadena_w '+Cadena_W(PWideChar(String(trim(memo1.lines.text))))); except end; try Memo2.Lines.Add('Cadena_AS '+String(AnsiString(Cadena_AS(PAnsiString(pAnsicHAR(string(trim(memo1.lines.text)))))))); except end; try Memo2.Lines.Add('Cadena_S '+Cadena_S(string(trim(memo1.lines.text)))); except end; end; procedure TForm1.Button1Click(Sender: TObject); begin try Memo2.Lines.Add('Cadena_ '+Cadena_7(PAnsiChar(AnsiString(trim(memo1.lines.text))))); except end; try Memo2.Lines.Add('Cadena_P '+StrPas(Cadena_P7(PChar(String(trim(memo1.lines.text)))))); except end; try Memo2.Lines.Add('Cadena_w '+Cadena_W7(PWideChar(String(trim(memo1.lines.text))))); except end; try Memo2.Lines.Add('Cadena_AS '+String(AnsiString(Cadena_AS7(PAnsiString(pAnsicHAR(string(trim(memo1.lines.text)))))))); except end; try Memo2.Lines.Add('Cadena_S '+Cadena_S7(string(trim(memo1.lines.text)))); except end; end; end.
Responder Con Cita
 



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
que tipo de datos utilizar para guardar cualquier tipo de archivo jeremiselxi MS SQL Server 2 08-12-2014 19:30:00
Recibir cadena de carácter. REHome .NET 3 09-09-2008 16:12:16
pasar un tipo de datos (array of record) entre aplicaciones mauqu Varios 4 26-10-2007 20:04:31
EOleSysError Error al cargar libreria de tipo/DLL david duarte Conexión con bases de datos 1 24-01-2006 18:27:08
Usar tipo de datos double con mysql..... uper MySQL 2 18-10-2005 20:31:42


La franja horaria es GMT +2. Ahora son las 01:30:41.


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