Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 26-05-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
erickperez6,

Cita:
Empezado por erickperez6
...Tengo una DLL...en vb6 funciona bien...siempre que mando un mensaje en blanco obtengo un error en la version delphi, pero nunca en la vb6...
Código:
' Declaración de la llamada a la DLL en VB6
Private Declare Function AddMessageField Lib "efProtocol.dll" (ByVal szField As String, ByVal lFieldLength As Long) As Long
Te comento:

1- En VB6 cuando una función envía un String por Valor a un DLL (ByVal), lo esta enviando como un String terminado en Nulo.

2- El tipo de dato Long en VB6 es equivalente a Integer en Delphi (Win32).

3- En el ejemplo en VB6 la función llamada en el DLL se denomina AddMessageField no SendSerialMessage, lo cual parece ser una incongruencia en el ejemplo en Delphi mostrado en el Msg #1.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

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

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

  TAddMessageField = function (szField : PChar; lFieldLength : Integer) : Integer; Stdcall;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  dllHandle : Cardinal;
  AddMessageField : TAddMessageField;

procedure CargarDll;
begin
   dllHandle := LoadLibrary('EFProtocol.dll') ;
   if dllHandle <> 0 then
      @AddMessageField := GetProcAddress(dllHandle, 'AddMessageField')
   else
      MessageDlg('La Librería EFProtocol.dll No Fue Cargada',mtError,[mbYes],0);
end;

function AddCampo(Texto : String) : longint;
begin
   if Assigned(AddMessageField) then
   begin
      if AddMessageField(PChar(Texto), Length(Texto)) <> 0 Then;
         raise Exception.Create('Error en un Mensaje: ' + IntToStr(result));
   end
   else
      MessageDlg('La Función AddMessageField No Fue Encontrada',mtError,[mbYes],0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   DataSerialPort : String;

begin

   DataSerialPort := 'Texto a Enviar al Puerto Serial';

   CargarDLL;

   AddCampo(DataSerialPort);
   AddCampo('');

   FreeLibrary(dllHandle);

end;

end.
El código anterior carga una DLL de forma dinámica para el envío de datos a un puerto serial tomando en consideración los puntos señalados anteriormente en función del problema planteado.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 26-05-2013 a las 21:26:37.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Instalando Delphi 2006 en diferente equipo malcantar Varios 1 20-09-2007 09:43:03
¿Qué versión de Delphi me recomiendan? ¿Cuál es la más usada? Chiefesito Varios 18 13-09-2006 00:10:24
El RichEdit se comporta raro darkerbyte Varios 4 16-11-2005 01:34:19
Algun instalador para Delphi diferente del InstallShield? delphivan Varios 3 19-04-2005 05:19:04
Ultima celda usada en excell davezf Varios 4 03-02-2005 23:22:59


La franja horaria es GMT +2. Ahora son las 07:49:26.


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