Показать сообщение отдельно
Старый 24.05.2006, 13:16     # 7
MrSerg
Guest
 
Сообщения: n/a

Небольшой пример:
Код:
// основная программа
// описание процедуры вашей dll
procedure initdll(adr : pointer); external 'mydll.dll' name 'initdll';

Type buf=array of byte;
       Tbuf=^buf;
Var  mybuf:array[0..1000] of byte;	

//  процедура обработчика
//  p- указатель на массив данных
//  len- длинна массива данных
procedure newdata(p:Tbuf;len:dword);
begin
if  IsBadReadPtr(p,len) then exit;
// обработка данных
For i:=1 to len do mybuf[i]:=p^[i];
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
// передача в dll адреса обработчика. 
Initdll(addr(newdata));

// конец основной программы


// программа dll 
library mydll;
uses SysUtils,windows;

Type Tbac= procedure newdata(p : pointer;len:dword);
Var  bac:tbac=nil;
     Buf:array[0..1000] of byte;	

// сдесь ваша dll получает адрес procedure newdata
Procedure Initdll(adr : pointer);
Begin
// инициализация 
bac:=adr;
End;

…
…
// где то здесь вы получаете новые данные
// и если  инициализация была передаете данные
if addr(bac)<>nil then bac(@buf,length(buf));
…
…

Exports
Initdll;

Begin
End.