DLL recebendo valores errados de variaveis - Delphi 2010.

Delphi

11/04/2011

Bom dia pessoal. 

To com um sério problema aqui e não consigo resolver. 

Tenho uma variavel com um Form, onde o chamo na aplicação principal. 

O Código da DLL é esse: 

library SDSCADBAS; 

uses 
ShareMem, 
SysUtils, 
Classes, 
Dialogs, 
IBDatabase, 
Forms, 
UDMCadBas in 'UDMCadBas.pas' {Dados: TDataModule}, 
UCadUsuario in 'UCadUsuario.pas' ; 


{$R *.res} 

Procedure ShowUsuario(Tela, Usuario: Integer); stdcall; 
begin 
InitializeDll; 
try 
FrmUsuario:= TFrmUsuario.Create(nil); 
FrmUsuario.ShowModal; 
FrmUsuario.Destroy; 
finally 
ReleaseDll; 
end; 
end; 

//sessão onde exporta-se as procedures e funções da DLL. 
exports 
ShowUsuario; 

begin 
end. 

Na minha aplicação Chamo essa procedure dessa DLL dessa maneira. 

type 
TMetodo = Procedure(Tela, Usuario: AnsiString); 

procedure TFrmPrinc.CapturaClick(Sender: TObject); 
var 
Formulario: TFormClass; 
NomeDLL, NomeForm, OpcaoMenu: String; 
HInst: THandle; 
FDLL: TFarProc; 
FormDLL: TMetodo; 
begin 
if Banco.QryMenu1.FieldByName('FUNCAO').AsString = 'DLL' then begin 
CodTela:= Banco.QryMenu1.FieldByName('CODIGO').AsInteger; 
NomeDLL:= Banco.QryMenu1.FieldByName('NOMEDLL').AsString; 
NomeForm:= Banco.QryMenu1.FieldByName('FUNCAODLL').AsString; 
HInst := LoadLibrary(PChar(NomeDLL));//carrega a DLL a ser utilizada. 
FDLL := MethodAddress(NomeForm); //converte a String para Procedimento. 
FormDLL:= GetProcAddress(HInst,PChar(NomeForm)); 
try 
FormDLL(CodTela, CodUsuario); 
except 
ShowMessage('Erro ao tentar abrir Tela, contate o Suporte!'); 
end; 
end; 
end; 

Quando executo o código, simplesmente ele não passa os valores corretos para a DLL. 

Estou passando por exemplo. Tela = 1 e Usuario = 1; 

Quando debugo a DLL, chega um valor la assim. 
Tela = 1254356 e Usuario = 8763872. 

Ja fuçei um monte na internet, tentei um monte de coisas e não consigo resolver esse problema. 

Alguem sabe o que to fazendo de errado? 

Qualquer ajuda é muito bem vinda. 

Estou usando Delphi 2010. 

Muito obrigado a todos. Te mais.
 
Marcos Paulo

Marcos Paulo

Curtidas 0

Respostas

José Silva.

José Silva.

11/04/2011

Tente usar stdcall na assinatura do método. Assim:type TMetodo = Procedure(Tela, Usuario: Integer); stdcall;
Espero que possa lhe ajudar
 
GOSTEI 0
Marcos Paulo

Marcos Paulo

11/04/2011

Olá José.
Muito obrigado pela sua ajuda.
Consegui resolver o problema usando o STDCALL;
Era isso mesmo que tava faltando aqui amigo.
Muito obrigado a todos, em especial ao José. Abraço.
GOSTEI 0
POSTAR