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; // Просто распаковываем вариант в указатель на байты .....
Теперь вызыватель (не забываем подключить _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.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Avaddon Сенкас, сегодня вечерком попробую , если сработает, а самое главное я сам пойму, что это такое, то буду иногда пользоваться! У меня уже есть место где надо применять подобные вещички.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения