Ver Mensaje Individual
  #3  
Antiguo 21-11-2013
El_Raso El_Raso is offline
Miembro
 
Registrado: oct 2003
Posts: 135
Reputación: 21
El_Raso Va por buen camino
Hola Compañero... el hermano Al Gonzalez me dio esta solucion y funciona fino...

Hola Manuel.

Supongo que ya probaste ese programa de ejemplo en XE2, y que el botón "Conectar" arroja el mensaje "Puerto Abierto con éxito", es decir, que la función OpenSerialPort no tiene problemas. Pero las otras funciones/botones (excepto CloseSerialPort) sí presentan un mensaje de error.

Si es como describo, entonces lo más problable es que se deba al manejo de caracteres Unicode que Delphi tiene desde la versión 2009. No es difícil solucionarlo, sólo hay que asegurarse de que todas las cadenas enviadas a las funciones de la DLL sean de tipo ANSIString (cadenas no Unicode) en lugar de String (cadenas Unicode en XE2).


Intenta primero, sólamente cambiando las declaraciones de las funciones importadas de la DLL de la siguiente manera:

function GetApiVersion (szVersion: String): LongWord; StdCall ; External 'vmaxfpi.dll';
function AddMessageField (szField: String; lFieldLength: LongWord ): LongWord; StdCall ; External 'vmaxfpi.dll';
...

Por

function GetApiVersion (szVersion: ANSIString): LongWord; StdCall ; External 'vmaxfpi.dll';
function AddMessageField (szField: ANSIString; lFieldLength: LongWord ): LongWord; StdCall ; External 'vmaxfpi.dll';
...

Es decir, sólo cambia donde diga "String" por "ANSIString" en todas las cabeceras que lleven la directiva "External".


Espero le sirva a todo el que tenga el problema.... y Gracias a Al Gonzalez nuevamente.
Responder Con Cita