Главная страница
    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.49 MB
Время: 0.648 c
15-1192398982
Мирандовец
2007-10-15 01:56
2007.11.18
MIRANDА - plugin на Delphi


15-1192348434
KKKL
2007-10-14 11:53
2007.11.18
Zip/UnZip


2-1193229696
alll_23
2007-10-24 16:41
2007.11.18
Как лучше считать дерево из таблицы БД в TreeView?


15-1192103772
Квэнди
2007-10-11 15:56
2007.11.18
Поиск литературы по потокам


15-1192367870
Finder
2007-10-14 17:17
2007.11.18
Существует ли вообще - русификатор Delphi 2006?





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