Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача объектов в DLL [D7, WinXP]


den303 ©   (2007-08-29 16:25:00) 

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

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

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

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

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


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


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


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

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


den303   (2007-08-29 17:09:00) [2]


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

:o)


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

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


den303   (2007-08-29 17:07:00) [3]


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

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


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

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

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


Reindeer Moss Eater   (2007-08-29 17:04:00) [4]

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


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


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


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


Reindeer Moss Eater   (2007-08-29 17:02:00) [6]

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


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


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


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


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

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


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


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


Reindeer Moss Eater   (2007-08-29 16:57:00) [8]

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


den303   (2007-08-29 16:56:00) [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)?


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


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


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


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

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

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


Reindeer Moss Eater   (2007-08-29 16:45:00) [12]

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

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


Den303   (2007-08-29 16:42:00) [13]


> 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?


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


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


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


umbra   (2007-08-29 16:35:00) [15]


> см. ф-цию CreateVariantArray)

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


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

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


Reindeer Moss Eater   (2007-08-29 16:30:00) [17]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо