Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 22 • Страница 2 из 2<  1  2
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
Ray Adams
Ладно, держи.
Это описание интерфейса в _TLB.PAS
Код:
  IDataReciver = interface(IDispatch)
    ['{3C3CB45B-79BD-4B25-A415-2C63CA3E77D1}']
    procedure ReciveData(pData: OleVariant); safecall;
  end;

Реализация:
Код:
type
  TDataReciver = class(TAutoObject, IDataReciver)
  protected
    procedure ReciveData(pData: OleVariant); safecall;

  end;
...
procedure TDataReciver.ReciveData(pData: OleVariant);
var
    i: Longint;
    p,pBuffer: PByte;
begin
 pBuffer:= AllocMem(VarArrayHighBound(pData,1)-VarArrayLowBound(pData,1));
 p := pBuffer;
 for i := VarArrayLowBound(pData,1) to VarArrayHighBound(pData,1) do begin
  p^ := Byte(pData[i]);
  inc(p);
 end;
// Тут твоя обработка....
end;
// Просто распаковываем вариант в указатель на байты
.....

initialization
  TAutoObjectFactory.Create(ComServer, TDataReciver, Class_DataReciver,
    ciSingleInstance, tmApartment); // Создаем синглинстанс.
end.

Теперь вызыватель (не забываем подключить _TLB.PAS)
Код:
function ToVarArray(const value): Variant;
var p : PByte;
    i : Integer;
begin
 result := VarArrayCreate([0, sizeof(value)-1],varByte);
 p := @value;
 i := 0;
 while (i<sizeof(value)) do begin
   result[i] := p^;
   inc(i);
   inc(p);
 end;
end;
// упаковка ПРОСТЫХ типов в varArray. Динамические структуры пакуются естественно по другому..

var
 pReciver: IDataReciver;
 v: Variant;
 value : record
   a: Integer;
   b: Word;
 end;
begin
 pReciver := CreateObject(DataReciver_CLSID) as IDataReciver;
 if  pReciver = nil then
  // Ну типа, облом.
 end;
 v := ToVarArray( value);
 pReciver.ReciveData(v);
 pReciver := nil; // Грохаем нафиг...

Это пример работы на этом же компьютере. Если на другом, то используй вызов CreateRemoteComObject.

_________________
Цель жизни - d20 по жизни...



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Avaddon
Сенкас, сегодня вечерком попробую , если сработает, а самое главное я сам пойму, что это такое, то буду иногда пользоваться! У меня уже есть место где надо применять подобные вещички.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 22 • Страница 2 из 2<  1  2
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan