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

Вниз

Передача объектов в DLL   Найти похожие ветки 

 
den303 ©   (2007-08-29 16:25) [0]

Доброго времени суток!

Мне нужно осуществить передачу объектов вида
параметр1=значение1
параметр2=значение2
...
параметрN=значениеN

(N неизвестно до передачи) в DLL и обратно в приложение (на остове COM-архитектуры).

Я в курсе, что объекты передавать крайне нежелательно. Каким образом осуществить передачу?

Думал насчёт преобразования в pchar, но неизвестно количество значений, тем более что каждая строка состоит как из параметра, так и из значения. Как поступить? Имеется ли возможность передать список параметров как COM-объект? Если да, то как?


 
umbra ©   (2007-08-29 16:30) [1]

передавайте как двумерный вариантный массив (см. ф-цию CreateVariantArray)


 
Reindeer Moss Eater ©   (2007-08-29 16:30) [2]

Думал насчёт преобразования в pchar, но неизвестно количество значений

Этого и не требуется


 
umbra ©   (2007-08-29 16:35) [3]


> см. ф-цию CreateVariantArray)

да уж. Имелась в виду функция VarArrayCreate


 
Сергей М. ©   (2007-08-29 16:42) [4]


> Имеется ли возможность передать список параметров как COM-
> объект?


Имеется, но городить такой огород из-за этой пустяковой проблемы нет смысла.


 
Den303 ©   (2007-08-29 16:42) [5]


> Reindeer Moss Eater ©   (29.08.07 16:30) [2]

Единственное, что мне взбрело в голову - каждое значение по очереди запихать в один pchar c delimiter"ом и отправиль в dll, а там распарсить обратно. Очень трудоёмко и муторно.
Как предлагаете Вы?


> umbra ©   (29.08.07 16:30) [1]

В справке D7 нету CreateVariantArray. Наверное, Вы имели ввиду VarArrayCreate. Подходит, в принципе, но VariantArray принимается DLL, написанной на любом языке? Я так понимаю, что этот массив передаётся как var?


 
Reindeer Moss Eater ©   (2007-08-29 16:45) [6]

Единственное, что мне взбрело в голову - каждое значение по очереди запихать в один pchar c delimiter"ом и отправиль в dll, а там распарсить обратно. Очень трудоёмко и муторно.

А все одиним списком это конечно метод не для нас. Слишком все просто.
:)


 
Юрий Зотов ©   (2007-08-29 16:48) [7]

> Очень трудоёмко и муторно

????????? !!!!!!!!!!!!


 
Сергей М. ©   (2007-08-29 16:52) [8]


> Den303 ©   (29.08.07 16:42) [5]


TStringList с легкостью справится с такой "муторной" задачей.


 
den303 ©   (2007-08-29 16:56) [9]


> Сергей М. ©   (29.08.07 16:42) [4]

Аналогично думаю, но тривиального решения до [1] не видел (Большое человеческое спасибо umbra!) . Осталось только уточнить...
В клиенте:

procedure xxxx;
var
 par:variant;
begin
 par:=varArrayCreate([0,1],varVariant);
 par[0]:="one";
 par[1]:="two";
 SendParam(par); //вызов ф-ии в DLL
end;


В DLL:

function SendParam(par:variant):HResult;
begin
 ShowMessage(par[0]+"="+par[1]);
end;

будет нормально обрабатываться и "быть правильным" с точки зрения архитектуры?


> Сергей М. ©   (29.08.07 16:52) [8] & others

Вы имеете ввиду, TStringList использовать для парсинга в pchar? Согласен, делать просто, но опять вопрос: является ли это правильным с точки зрения архитектуры (посылать очень объёмную строку в pchar)?


 
Reindeer Moss Eater ©   (2007-08-29 16:57) [10]

А типа варааррэй будет компактнее.


 
Сергей М. ©   (2007-08-29 17:00) [11]


> будет нормально обрабатываться и "быть правильным" с точки
> зрения архитектуры?


Нет, не будет.

Независимось от сред разработки дает только SafeArray.


> является ли это правильным с точки зрения архитектуры (посылать
> очень объёмную строку в pchar)?


Насколько объемную ?


 
Reindeer Moss Eater ©   (2007-08-29 17:02) [12]

> является ли это правильным с точки зрения архитектуры (посылать
> очень объёмную строку в pchar)?


Если еще учесть, что в любом случае это ровно четыре байта.


 
Сергей М. ©   (2007-08-29 17:03) [13]


> den303 ©   (29.08.07 16:56) [9]
>
>


Загляни в справку по теме "SafeArrays" - много полезного там почерпнешь для себя.


 
Reindeer Moss Eater ©   (2007-08-29 17:04) [14]

архитекторам недосуг справки разные рассматривать
:)


 
den303 ©   (2007-08-29 17:07) [15]


> Сергей М. ©   (29.08.07 17:00) [11]

То есть, достаточно поменять в [9] VarArray на SafeArray?
Строка с параметрами и значениями, если её "делимитить :o)", получается порядка 500 символов....


> Reindeer Moss Eater ©   (29.08.07 17:02) [12]

Сенкс, не знал. То есть, так нормально?

ЗЫ: Я домой, завтра дочитаю Ваши предложения. Спасибо за помощь!


 
den303 ©   (2007-08-29 17:09) [16]


> Reindeer Moss Eater ©   (29.08.07 17:04) [14]
> архитекторам недосуг справки разные рассматривать:)

:o)


> Сергей М. ©   (29.08.07 17:03) [13]

ОК, дома гляну


 
Сергей М. ©   (2007-08-29 17:09) [17]


> достаточно поменять в [9] VarArray на SafeArray?


Нет, не достаточно.

Штудируй справку, там все сказано по этому поводу.



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

Форум: "Основная";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.056 c
15-1192175853
problemmmm
2007-10-12 11:57
2007.11.18
кто подскажет?


2-1193291606
Sergl
2007-10-25 09:53
2007.11.18
Как убрать перевод строки при работе с memo?


2-1193167102
AlexeyN
2007-10-23 23:18
2007.11.18
Стиль оформления как в MS Office


2-1193534997
San1712
2007-10-28 04:29
2007.11.18
Как удалить запись типа TSearchRec ?


2-1193504034
Steep
2007-10-27 20:53
2007.11.18
Поиск папок





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский