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

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

Проблема с передачей параметрой из DLL [D5, Win2k]


hacker ©   (2002-01-01 21:40:00) 

Проблема такая: В моей DLL функция с параметром Func(Var Str: String): Boolean; //здесь пробовал все StdCall и подобное
Если там сделать так - Str:="Str1";, то все хорошо,
а если сделать Str:="Str1"+"Str2";, то при присваивании этой строки там где мы ее вызывали(в процедуре программы), вылетает ошибка "Invalid pointer operation".
В чем прикол?


Hacker   (2002-01-06 21:08:00) [1]

Ну и не буду, я согласен, таскать везде не пойдет


Tolik2002   (2002-01-06 12:43:00) [2]

лучше не использовать тип String


Space Rover   (2002-01-03 06:56:00) [3]


2Vovchik:borlndmm.dll весит всего 25 кил.
@hacker ©:Укажи в .dpr-файле в разделе uses - ShareMem самой первой... как в основном проекте так и в DLL... и забудишь про свою проблему...
Удачи...


Vovchik   (2002-01-03 00:20:00) [4]

А по-моему таки грамотнее через указатели (PChar), особенно если цеплять DLL, писанную на другом языке. И вообще, потом ещё таскать за собой borlndmm.dll.


skaminski~~~~   (2002-01-02 23:44:00) [5]

либо использовать borlndmm.dll. см. ответ Алексея Петрова


Vovchik   (2002-01-02 16:42:00) [6]

Здесь проблема связана с выделением памяти под строку. Память должна выделяться и уничтожаться либо в DLL либо в основной программе, но не там и там. Есть по-крайней мере два пути решения:

1. Плохой - передавать строку всегда фиксированной длины, тогда передача будет через стек.

2. Единственный нормальный. Как во всех ф-циях WIN API. Память под строку выделяет основная программа, потом вызывает ф-цию из DLL и передаёт ей указатель (т.е. PChar) на выделенный блок пямяти. Ф-ция пишет туда, потом основная программа убивает этот кусок памяти. (См. хелп к винаппийским ф-циям, работающим со строками. Сделай так же.)
От string нужно отказаться по крайней мере на время передачи строки. Потом можно скопировать из PChar в String. У меня со стрингом так и не получилось ничего сделать.


hacker   (2002-01-02 08:52:00) [7]

Хорошо...


ctapik-net   (2002-01-02 01:13:00) [8]

там написано что вместо стринг надо использовать либо ShortString либо PChar


Алексей Петров   (2002-01-02 00:58:00) [9]

Почитай про ShareMem комментарий, который Wizard DLL-ки в файл проекта добавляет. Там как раз об этом написано :)


Наверх

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