Filizola MF-C

09/11/2009

Boa tarde Pessoal; Preciso de uma ajuda de, como fazer uma dll ponte, para receber as informações da pcscale.dll /----------------------------------------------------------------//
{                   INICIO FUNCOES DA DLL PcScale                  }
//----------------------------------------------------------------//
{Declara a função ConfiguraBalanca existente na DLL "PcScale.dll"}
function ConfiguraBalanca(Balanca: Integer; Aplicativo: THandle): Boolean;
             stdcall; external PcScale; {Declara a função InicializaLeitura existente na DLL "PcScale.dll"}
function InicializaLeitura(Balanca: Integer): Boolean;
             stdcall; external PcScale; {Declara a função ObtemInformacao existente na DLL "PcScale.dll"}
function ObtemInformacao(Balanca: Integer; Campo: Integer): double;
             stdcall; external PcScale; {Declara a função FinalizaLeitura existente na DLL "PcScale.dll"}
function FinalizaLeitura(Balanca: Integer) : Boolean;
             stdcall; external PcScale; {Declara a função ExibeMsgErro existente na DLL "PcScale.dll"}
function EnviaPrecoCS(Balanca : integer; Preco : double) : Boolean;
             stdcall; external PcScale; {Declara a função FinalizaLeitura existente na DLL "PcScale.dll"}
function ObtemParametrosBalanca(Balanca: Integer; Modelo: PInteger;
                             Porta: PInteger; BaudRate: PInteger
                             ): Boolean
             stdcall; external PcScale; {Declara a função ObtemNomeBalanca existente na DLL "PcScale.dll"}
Procedure ObtemNomeBalanca(Modelo: Integer; Ret: PChar);
             stdcall; external PcScale; {Declara a função ExibeMsgErro existente na DLL "PcScale.dll"}
Procedure ExibeMsgErro(Aplicativo : THandle);
             stdcall; external PcScale;
Conforme exemplo: Library CarregaDll;   Uses SysUtils, Classes, Windows, Dialogs;   {$R *.RES}   Type TConsisteInscricaoEstadual = Function (Const Insc, UF: String): Integer; Stdcall;   // iFuncId    -> Código identificador da função // pParametro -> Parâmetros passados para a função // pBuffer    -> Retorno da função // iBuffer    -> Tamanho do buffer de retorno pré-alocado ( São alocados 20000 Bytes por padrão )   Procedure Funcao2;   Begin      MessageDlg('Funcao 1', mtinformation, [mbok], 0);   End;   Procedure ExecInClientDLL( iFuncId : integer; pParametro, pBuffer : pChar; iBuffer : integer ); StdCall;   Var ConsisteInscricaoEstadual : TConsisteInscricaoEstadual;     LibHandle: THandle; sRetorno: String;     aParametro: Array[0..10] Of String; iParametros, iPos, iIndice: Integer;   Begin       Case iFuncId Of     1:       Begin          LibHandle := LoadLibrary (PChar (Trim ('DllInscE32.Dll')));        If LibHandle <=  HINSTANCE_ERROR Then           Raise Exception.Create ('Dll não carregada');        @ConsisteInscricaoEstadual  :=  GetProcAddress (LibHandle,                                                        'ConsisteInscricaoEstadual');        iParametros := 1;        sRetorno := pParametro;        While Pos(',', sRetorno) > 0 Do           Begin              sRetorno := Copy(sRetorno, Pos(',', sRetorno) + 1, Length(sRetorno));              Inc(iParametros, 1);           End;        sRetorno := pParametro;          iIndice := 1;        While iIndice <= iParametros Do           Begin              If Pos(',', sRetorno) > 0 Then                 iPos := Pos(',', sRetorno) - 1              Else                 iPos := Length(sRetorno);              aParametro[iIndice - 1] := Copy(sRetorno, 1, iPos);              sRetorno := PChar(Copy(sRetorno, Pos(',', sRetorno) + 1, Length(sRetorno)));              Inc(iIndice, 1);           End;          sRetorno := IntToStr(ConsisteInscricaoEstadual(aParametro[0], aParametro[1]));        StrPLCopy(pBuffer , sRetorno, iBuffer);       End;       2: Funcao2()       End;   End;     Exports ExecInClientDLL;   // Essa será a única função lida pelo client do Protheus   Begin End.   Observação - As dll’s envolvidas ao processo devem estar na pasta onde o atalho do remote está sendo executado, Obrigado

Carlos Silva