Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Как передать массив записей используя технологию COM?   Найти похожие ветки 

 
Kolan ©   (2006-04-24 21:13) [0]

Здравствуйте,
 Есть запись подобного вида:

TDoublePoint = record
   X: Double;
   Y: Double;
 end;


И массив:
 TDoublePointArray = array of TDoublePoint;


Вопрос: Как передать массив такого типа исользуя COM?
Те я хочу чобы на сервере был метод GetArray для получения массива.

Пробовал переконвертировать массив в массив вариантов, не получилось. Может я вообще неправильно делаю, поэтому решил спросить.

PS
Код как пытался привести сейчас немогу, забыл его на работе :)


 
atruhin ©   (2006-04-25 04:55) [1]

PSafeArray , дальше либо 2 массива X,Y, либо 1 элементы по очереди


 
AbrosimovA ©   (2006-04-25 08:48) [2]

Попробуй процедуру DynArrayToVariant


 
Kolan ©   (2006-04-25 21:36) [3]

OK. Попробую...


 
Kolan ©   (2006-04-25 23:45) [4]

AbrosimovA ©   (25.04.06 08:48) [2]
Что - то я не понял что надо в TypeInfo передать. Можно пример для массива:
array of Double


 
Sapersky   (2006-04-26 02:04) [5]

что надо в TypeInfo передать

Могу предположить что TypeInfo(TDoublePointArray)


 
Kolan ©   (2006-04-26 10:42) [6]

О вроде получилось:
Сделал просто массив Double.

TDoubleArray = array of Double;

И две процедуры. Правильно?

procedure TForm1.ConvertArrayVariant(var V: Variant; Arr: TDoubleArray);
begin
 if Length(Arr) > 0 then
   DynArrayToVariant(V, Arr, TypeInfo(TDoubleArray));
end;

procedure TForm1.ConvertVariantToArray(V: Variant; var Arr: TDoubleArray);
begin
 DynArrayFromVariant(Pointer(Arr), V, TypeInfo(TDoubleArray));
end;


 
Kolan ©   (2006-04-26 12:25) [7]

Так как я описал выше работает. А если ту же схему использовать с COM объектом, то нет. Разница только вот в чем:

function TFreGrafServer.GetArray(var V: OleVariant): HResult;
var
 Arr: TDoubleArray;
begin
 ConvertPairArrayToDoubleArray(
   HeadManager.MeasurmentManager.CurrentMeasurment.OutPutGraff,Arr);
 DynArrayToVariant(Variant(V), Arr,TypeInfo(TDoubleArray));
 Result := S_OK;
end;


PS
И как настроить отладку? Сервер(COM объект) и приложение, которое им пользуется в одной группе..


 
Kolan ©   (2006-04-26 13:09) [8]

Все разобрался.
Вот как надо было:
function TFreGrafServer.GetArray(out V: OleVariant): HResult;



Страницы: 1 вся ветка

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
2-1147841495
roman_ln
2006-05-17 08:51
2006.06.04
Borland Pascal 7.0 редактор


15-1146893863
Ega23
2006-05-06 09:37
2006.06.04
С Днём рождения! 6 мая


15-1147414464
Ламот
2006-05-12 10:14
2006.06.04
Диспетчер сервера терминалов отображает не всех пользователей


2-1147939972
elena_pp
2006-05-18 12:12
2006.06.04
Как узнать и записать версию exe-ника в строковую переменную?


3-1144924752
Бульбаш
2006-04-13 14:39
2006.06.04
Как передать фокус в нужную колонку грида