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
public
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.