Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Вниз

Как передать массив записей используя технологию 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.056 c
3-1144674511
kyn66
2006-04-10 17:08
2006.06.04
Вложенный Select


4-1142237804
Arazel
2006-03-13 11:16
2006.06.04
Надо узнать в какое время вчера ОС завершилось?


2-1148040643
Николай Владимирович
2006-05-19 16:10
2006.06.04
?TreeView Сохранение и загрузка с учётом записанных данных?


15-1146768050
bogdan
2006-05-04 22:40
2006.06.04
Представить суму всемя способами


2-1148016114
Близнец
2006-05-19 09:21
2006.06.04
ShellExecuteEx и WaitForSingleObject





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский