Форум: "Основная";
Текущий архив: 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