Saludos a todos
Estoy desarrollando una dll en lazarus 1.6.4 para utilizar desde una aplicación también desarrollada por mí en delphi 5. Tengo los fuentes de ambas herramientas.
intentando simplificar al máximo este es el código que compilo en delphi 5:
Código Delphi
[-]
unit UDllColor;
interface
type
TColor = (
oBlack,
oWhite,
oRed
);
Procedure PintarColor(aColor:tcolor); external 'color.dll';
implementation
end.
y este el código de la dll en lazarus:
Código Delphi
[-]
library color;
{$mode objfpc}{$H+}
uses
Interfaces, Forms,controls, Dialogs, Classes,sysutils;
type
TColor = (
oBlack,
oWhite,
oRed
);
Procedure PintarColor(aColor:TColor); export;
begin
QuestionDlg('Color' ,'indice del color seleccionado ->'+inttostr(integer(acolor)), mtCustom,
[mrCancel,'Cancelar',mrRetry,'Reintentar'],0);
end;
exports PintarColor;
{$R *.res}
begin
Application.Initialize; end.
El caso es que cuando desde delphi llamo a PintarColor pasandole oBlack como parámetro (o sea el primer valor del tipo) todo funciona como espero, sin embargo cuando llamo a PintarColor pasando cualquier otro parámetro, la dll en lazarus en lugar de recibir el número esperado parece recibir otro o por lo menos pinta otro en el dialogo que muestro. Es decir si hago esto en delphi:
Código Delphi
[-]
if integer(oWhite) = 1 then
PintarColor(oWhite);
El dialogo que pinta la dll es ' indice del color seleccionado -> 1378817 '.
Como pista puedo decir que que si modifico la función del lado de delphi para que acepte enteros y le paso un 1 la dll por supuesto muestra ' indice del color seleccionado -> 1 '
Alguien tienen una pista que me pueda inidicar lo que me puede estar pasando?
Entiendo que tiene fácil solución pasando a utilizar enteros, pero lo cierto que este mismo sistema lo he utilizado con versiones anteriores de lazarus y nunca tuve este problema.