Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12789 |
Есть Out-process COM сервер. Написан на C++ и COM-клиент, написан на Delphi. И сервер и клиент мои. Нужно из клиента в сервер передать такой массив type TDblPoint = record X, Y: Double; end; TPointList = array of TDblPoint;Передача должна быть OLE-совместимой. Как это сделать быстрее и проще? Сейчас у меня в цикле вызывается метод HRESULT _stdcall AppendPoint([in] double x, [in] double y);Но для большого числа точек (~500) получаются ощутимые задержки. Поэтому хочется весь массив передать за один раз. Придумал два варианта: 1. Сложить точки в IStream и передать. Из плюсов - простота реализации и клиента и сервера. Из минусов жесткая привязка на двоичный формат 2. Передать двумя вариантными массивами. В один сложить все X, в другой все Y. Минусы - очень геморройно работать с вариантами из C++ Может еще идеи есть? С уважением, Vasilisk |
4 апр 21, 15:38 [22304104] Ответить | Цитировать Сообщить модератору |
Гаджимурадов Рустам Member Откуда: Сообщений: 62646 |
Да сложи в один массив и "читай" парами. Posted via ActualForum NNTP Server 1.5 |
4 апр 21, 16:06 [22304108] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12789 |
|
||||
4 апр 21, 16:44 [22304115] Ответить | Цитировать Сообщить модератору |
Гаджимурадов Рустам Member Откуда: Сообщений: 62646 |
Ну можно и двумя... Posted via ActualForum NNTP Server 1.5 |
4 апр 21, 17:03 [22304119] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 6314 |
_Vasilisk_,
что значит? |
||
5 апр 21, 09:17 [22304201] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12789 |
procedure LoadData(AGUID: {NOT_OLEAUTO(TGUID)}OleVariant; const AData: IUnknown); dispid 106;Тынц |
||||
5 апр 21, 13:01 [22304372] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 6314 |
только массив выходит, как уже предложили |
||||||||
5 апр 21, 13:13 [22304382] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12789 |
|
||||||||
5 апр 21, 13:31 [22304393] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 6314 |
тынц |
||||||||||||
5 апр 21, 15:29 [22304545] Ответить | Цитировать Сообщить модератору |
L_argo Member Откуда: Сообщений: 1456 |
по сабжу: XML или JSON. Универсально и гибко. |
5 апр 21, 15:49 [22304571] Ответить | Цитировать Сообщить модератору |
Гаджимурадов Рустам Member Откуда: Сообщений: 62646 |
Оверкилл, даже JSON. Впрочем, если скорость неважна, можно и так. Posted via ActualForum NNTP Server 1.5 |
5 апр 21, 15:57 [22304579] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12789 |
|
||||
5 апр 21, 16:15 [22304612] Ответить | Цитировать Сообщить модератору |
s62 Member Откуда: Жуковский Сообщений: 1299 |
_Vasilisk_, типа такого не пробовал? Вроде стандартный вариант, в разных примерах его видел, вот из одной своей старой программы: TOutputs = array[0..7] of byte; TMState = record OutputsV: TOutputs; OutputsA: TOutputs; end; function TShedPortSrv_.GetState8(out State: OleVariant): HResult; var Size: integer; P: Pointer; begin if OnLine then begin Size:=SizeOf(TMState); State:=VarArrayCreate([0, Size-1], varByte); //<----вот это вот P:=VarArrayLock(State); try Move(TM88Protocol.MState, P^, Size); finally VarArrayUnlock(State); //досюда end; Result:=S_OK; end else Result := S_FALSE; end; Сообщение было отредактировано: 5 апр 21, 16:56 |
5 апр 21, 17:03 [22304660] Ответить | Цитировать Сообщить модератору |
Valery_B Member Откуда: Москва Сообщений: 2038 |
А если важна, то писать свою операционную систему реального времени. |
||||||||
5 апр 21, 18:19 [22304713] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
SafeArray Posted via ActualForum NNTP Server 1.5 |
5 апр 21, 18:22 [22304716] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12789 |
|
||||
6 апр 21, 12:08 [22304975] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 6314 |
_Vasilisk_, SafeArray это один из варинатов типа в Variant, не особо сложна с ним работа и в дельфях |
6 апр 21, 17:23 [22305130] Ответить | Цитировать Сообщить модератору |
kealon(Ruslan) Member Откуда: Нижневартовск Сообщений: 6314 |
|
||||||||
6 апр 21, 17:24 [22305131] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12789 |
|
||||
6 апр 21, 17:51 [22305146] Ответить | Цитировать Сообщить модератору |
Все форумы / Delphi | ![]() |