Ver Mensaje Individual
  #1  
Antiguo 26-05-2013
erickperez6 erickperez6 is offline
Miembro
 
Registrado: may 2003
Posts: 152
Reputación: 22
erickperez6 Va por buen camino
funcion en dll usada en vb6 se comporta diferente en delphi

Saludos,

Tengo una DLL que no se en que ambiente fue desarrollada, ni tampoco tengo documentacion de ella, solo tengo el codigo fuente de una aplicacion en visual basic 6 que la utiliza y funciona bien.

El problema lo tengo en una funcion que en vb6 funciona bien pero en delphi funciona pero a medias, me explico que sucede, tengo la siguiente declaracion de la funcion en vb6:

Código:
Private Declare Function AddMessageField Lib "efProtocol.dll" (ByVal szField As String, ByVal lFieldLength As Long) As Long

' dandole uso a la funcion
Private Sub AddField(sMessage As String)
Dim lAux As Long
    lAux = AddMessageField(sMessage, Len(sMessage))
    If lAux <> 0 Then ShowError (lAux)
End Sub
El procedimiento AddField lo que hace es mandar un mensaje al puerto serial y si la variable lAux trae un valor diferente a cero fue que ocurrio un error, resulta que es posible mandar mensajes en blanco en determinados momentos, es decir que puedo hacer esto:

Código:
AddField ""   ' esto es valido
En la version para delphi funciona bien hasta que envio mensajes en blanco, siempre lAux me devuelve un numero diferente a cero, pero he hecho una copia fiel de vb6 a delphi. La definicion en delphi que hice es la siguiente:
Código Delphi [-]
type
  tAddMessageField = function (szField : String; lFieldLength : Longint) : Longint; stdcall;

implementation 

var
   dllHandle : cardinal;
   AddMessageField : tAddMessageField;

procedure cargardll;
begin
  dllHandle := LoadLibrary('EFProtocol.dll') ;
  if dllHandle <> 0 then
   @SendSerialMessage := GetProcAddress(dllHandle, 'SendSerialMessage') ;
end;

function addcampo(texto : string) : longint;
begin
  result := AddMessageField(texto, Length(texto));

 // if  result <> 0 then
 //   raise Exception.Create('hubo un error en un mensaje ' + IntToStr(result));
end;


No importa la situacion ni el momento, pero siempre que mando un mensaje en blanco obtengo un error en la version delphi, pero nunca en la vb6, creo que la definificion en delphi de la funcion no es la apropiada, a alguien le ha pasado algo similar?
Responder Con Cita