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

Вниз

Передача объектов в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
6-1174314921
vic_774N
2007-03-19 17:35
2007.11.18
Есть ли смысл в реализации такой программы ...


15-1192088145
Azize
2007-10-11 11:35
2007.11.18
В США запускают сеть Internet 2


1-1188407910
Farel
2007-08-29 21:18
2007.11.18
firebird


2-1193617178
Nikola
2007-10-29 03:19
2007.11.18
Отображение данных в DBGrid


15-1192261056
Kostafey
2007-10-13 11:37
2007.11.18
Культурная установка BDE на пользовательском PC