![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с передачей параметрой из 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-ки в файл проекта добавляет. Там как раз об этом написано :)