Autor
Mensagem
Caros amigos, estou com um problema em uma aplicação bem especifica desenvolvida em Delphi, essa aplicação tem por finalidade controlar um equipamento USB especifico usado para analizar a umidade, a empresa onde trabalho comprou esse equipamento que veio com um software fechado para usa-lo sem muitos recursos, como precisavamos implementar recursos adicionais, entrei em contato com a fabrica e eles me enviaram um exemplo de codigo fonte em Delphi que usa uma DLL, o executavel que veio junto já compilado funciona bem, mas o codigo gera uma infinidade de erros quando tento compilar.
Já instalei o componente que veio junto com o código e registrei a DLL no windows, mas não funcionou.
Uso o Delphi 2010 com Windows 7 32bits, e não tenho conhecimento avançado, apesar de já ter desenvlvido muitas aplicações em Delphi desde a versão 7, nunca usei DLLs, e fiquei bem confuso com o exemplo enviado pela fabrica.
Se alguem puder me ajudar, desde já eu agradeço, o arquivo está no link abaixo:
http://www.megaupload.com/?d=ZZH1Q7KV
Já instalei o componente que veio junto com o código e registrei a DLL no windows, mas não funcionou.
Uso o Delphi 2010 com Windows 7 32bits, e não tenho conhecimento avançado, apesar de já ter desenvlvido muitas aplicações em Delphi desde a versão 7, nunca usei DLLs, e fiquei bem confuso com o exemplo enviado pela fabrica.
Se alguem puder me ajudar, desde já eu agradeço, o arquivo está no link abaixo:
http://www.megaupload.com/?d=ZZH1Q7KV
Você ja executou o arquivo RegisterCK.bat? Como você utiliza o win 7 você deve executar este arquivo com privilégios de administrador. Após fazer isso abra o seu projeto (seu siotema) e no menu Project localize o item import type libarye na lista encontre o item relacionado ao seu componente. No caso: algo relacionado a DEvcom...qualquer coisa posta ai.
Leonardo, obrigado pelas dicas, consegui compilar sem erros, mas agora gera erros ao executar, segue erros abaixo:

E quando clico em "break" aponta a linha 233 na TestUnit.pas na procedure abaixo:
--------------------------------------------------------------------------------------------
procedure TFCKTest.BGetDevNumClick(Sender: TObject);
type
pIntegerArray = ^IntegerArray;
IntegerArray = array of integer;
var
T_A: tSafeArray;
SA: PSafeArray;
D, N, I: integer;
NumProbes, pv: integer;
MC750Dev: integer;
begin // Enumerate all available devices and put device typ in listbox
EdPortName.Text := CKServer.ComportName;
//SA := CKServer.AllDev;
SA := CKServer.Get_AllDev;
T_A := SA^; Linha apontada como erro.
D := SafeArrayGetDim(sa);
N := SafeArrayGetElemsize(sa); //intarr 4
EdNumDevices.Text := IntToStr(sa.rgsabound[0].cElements);
NumProbes := sa.rgsabound[0].cElements;
LBDeviceTyp.Clear;
MC750Dev := 0;
for I := 0 to NumProbes - 1 do
begin
SafeArrayGetElement(sa, i, pv);
LBDeviceTyp.Items.Add(IntToStr(pv));
if pv = 12 then
MC750Dev := 12;
end;
SafeArrayDestroyData(sa);
PressureOK := MC750Dev = 12; //no airbox
if PressureOK then
begin
BSetPressure.Enabled := false;
BPrUpdate.Enabled := false;
end
else
begin
BSetPressure.Enabled := true;
BPrUpdate.Enabled := true;
end;
if Logging then
writeln(LogFile, 'EnumDev:', NumProbes);
end;
---------------------------------------------------------------------------------------
Agradeço se puder me ajudar.
Desde já, obrigado.

E quando clico em "break" aponta a linha 233 na TestUnit.pas na procedure abaixo:
--------------------------------------------------------------------------------------------
procedure TFCKTest.BGetDevNumClick(Sender: TObject);
type
pIntegerArray = ^IntegerArray;
IntegerArray = array of integer;
var
T_A: tSafeArray;
SA: PSafeArray;
D, N, I: integer;
NumProbes, pv: integer;
MC750Dev: integer;
begin // Enumerate all available devices and put device typ in listbox
EdPortName.Text := CKServer.ComportName;
//SA := CKServer.AllDev;
SA := CKServer.Get_AllDev;
T_A := SA^; Linha apontada como erro.
D := SafeArrayGetDim(sa);
N := SafeArrayGetElemsize(sa); //intarr 4
EdNumDevices.Text := IntToStr(sa.rgsabound[0].cElements);
NumProbes := sa.rgsabound[0].cElements;
LBDeviceTyp.Clear;
MC750Dev := 0;
for I := 0 to NumProbes - 1 do
begin
SafeArrayGetElement(sa, i, pv);
LBDeviceTyp.Items.Add(IntToStr(pv));
if pv = 12 then
MC750Dev := 12;
end;
SafeArrayDestroyData(sa);
PressureOK := MC750Dev = 12; //no airbox
if PressureOK then
begin
BSetPressure.Enabled := false;
BPrUpdate.Enabled := false;
end
else
begin
BSetPressure.Enabled := true;
BPrUpdate.Enabled := true;
end;
if Logging then
writeln(LogFile, 'EnumDev:', NumProbes);
end;
---------------------------------------------------------------------------------------
Agradeço se puder me ajudar.
Desde já, obrigado.






