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

Вниз

Как в процедуру из библиотеки передать TStringList?   Найти похожие ветки 

 
tytus ©   (2004-04-12 16:05) [0]

Добрый день ВСЕМ. Имеется библиотека для вызова модальной формы. В этой форме мне бы хотелось отобразить список в элементе ListBox
(ListBox.Items.Assign(List)), где List - одна из переменных при вызове процедуры.
Заголовок примерно такой:
Procedure Show(AHandle:THandle;List:TStringList);stdcall;
Если есть идеи - прошу подскажите как это сделать.


 
Гаврила   (2004-04-12 16:12) [1]

передавай PChar
PChar(SourceList.Text)
в приемнике
ListBox.Items.Text:= <переданный PChar>


 
clickmaker ©   (2004-04-12 16:14) [2]

List:TStringList - всего лишь указатель. Аналогично

Procedure Show(AHandle:THandle;List: Pointer);stdcall;
begin
 SL := TStringList(List);

Поэтому можно смело передавать как есть


 
Reindeer Moss Eater ©   (2004-04-12 16:15) [3]

Зачем же закладываться на особенности реализации Items.Text?
Лучше передать callback которая заенумерэйтит все элементы списка


 
Гаврила   (2004-04-12 16:32) [4]

>>clickmaker ©   (12.04.04 16:14) [2]

Смело так передавать можно только в случае bwrtp


 
clickmaker ©   (2004-04-12 16:34) [5]


> Гаврила   (12.04.04 16:32) [4]

Отнюдь. Причем тут bwrtp?


 
Reindeer Moss Eater ©   (2004-04-12 16:37) [6]

Procedure Show(AHandle:THandle;List: Pointer);stdcall;

После этого останется только объяснить программисту на VB, C++, etc - пользователю созданной DLL что такое TStringList и где у него элементы списка лежат


 
Гаврила   (2004-04-12 16:38) [7]

>>clickmaker ©   (12.04.04 16:34) [5]

Во первых, управление памятью (пресловутый ShareMem может понадобиться)
во вторых, как уже упоминалось в этом форуме, при такой передаче не сработает оператор is, так как по сути это разные классы.
В третьих, директивы для компилятора (такие как например, выравнивание $A), может быть разным в хосте и библиотеке - рискуем поиметь проблемы. С другой стороны, велика вероятность, что все сработает, но, имхо, это неправильно концептуально. И опасно


 
Reindeer Moss Eater ©   (2004-04-12 16:41) [8]

Библиотеки должны экспортировать функции с параметрами - базовыми типами Windows


 
tytus ©   (2004-04-12 16:46) [9]

>Гаврила.
Спасибо, получилось.
Выглядит так:
procedure GetNewNodeName(AHandle:THandle;VList:PChar);
var
 AddTVfm: TAddTVfm;
begin
Application.Handle:=AHandle;
AddTVfm:=TAddTVfm.Create(Application);
try
AddTVfm.ListBox1.Items.Text:=VList;
AddTVfm.ShowModal;
и т.д...
>Reindeer Moss Eater
Вроде как поинтересней будет, если можно - пару строк идейки.


 
Reindeer Moss Eater ©   (2004-04-12 16:56) [10]

Передавая PChar на Items.Text обрекаем пользователя DLL на необходимость знать как текст делится строки.
Если он программирует на Delphi это не проблема. А если нет?

Я бы передал в библиотеку указатель на процедуру, которая перечисляет элементы списка в хост приложении.
Вот и все.


 
tytus ©   (2004-04-12 17:09) [11]

>Reindeer Moss Eater
Попробую вспомнить:
Как строка текст формируется с разделителями #13#10.
Как нуль-строка - с разделителями #0 и в самом конце #0#0.
Правильно?
Передавать текст длл никому не буду (хотя хакеры возможно будут).
А насчет CallBack  сам давно хотел почитать у Ксавье & Ко.
Пока все.
Всем спасибо!


 
Гаврила   (2004-04-12 17:10) [12]

>>Reindeer Moss Eater ©   (12.04.04 16:56) [10]

>>Передавая PChar на Items.Text обрекаем пользователя DLL на необходимость знать как текст делится строки.

Как делится.... #13#10 и делится, стандартно  
ничего страшного...


 
Гаврила   (2004-04-12 17:14) [13]

>>tytus ©   (12.04.04 17:09) [11]

Нет, там только в конце один #0
внутри текста нулей нет


 
tytus ©   (2004-04-12 17:28) [14]

>Гаврила
Интересно, в хелпе сказано другое, или я заблуждался.
Когда-то я использовал Функцию GetLogicalDriveStrings.

lpBuffer

Points to a buffer that receives a series of null-terminated strings, one for each valid drive in the system, that end with a second null character. The following example shows the buffer contents with <null> representing the terminating null character.

c:\<null>d:\<null><null>  
Вот это <Null> наверное и есть #0.
Или в стринглистах все по-другому...


 
Гаврила   (2004-04-12 17:44) [15]

>>tytus ©   (12.04.04 17:28) [14]

В функциях API часть применяется такая схема, в стринглисте по другому


 
Игорь Шевченко ©   (2004-04-12 18:57) [16]

Да какая разница, как передавать, главное, чтобы передающая и принимающая стороны договорились между собой о способе передачи.
А уж разделять нулями, или #13#10 или точкой с запятой, какая разница ?


 
Palladin ©   (2004-04-12 19:03) [17]

Очень удобно использовать CommaText


 
Polevi ©   (2004-04-12 22:04) [18]

> [10] Reindeer Moss Eater ©   (12.04.04 16:56)
тогда уж сразу не просто DLl, а COM
и возвращать интерфейс-енумератор, чтобы форичем из васика удобно было
:)



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

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

Наверх




Память: 0.48 MB
Время: 0.034 c
3-1081222420
V-A-V
2004-04-06 07:33
2004.05.02
Пароль на базу Access


1-1081938543
V-Isa
2004-04-14 14:29
2004.05.02
Запретить закрытие формы.


1-1082025258
Flahas
2004-04-15 14:34
2004.05.02
exel v dbgrid...


4-1077797789
KADAN
2004-02-26 15:16
2004.05.02
ехплорер падает :(


14-1081422498
Elast
2004-04-08 15:08
2004.05.02
IB





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