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




Вниз

Проблема с передачей параметрой из DLL 


hacker   (2002-01-01 21:40) [0]

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



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

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



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

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



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

Хорошо...



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

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

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

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



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

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



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

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



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


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



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

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



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

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




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




Наверх





Память: 0.73 MB
Время: 0.018 c
7-75698           VS                    2001-10-08 13:23  2002.01.24  
Конвентирование String в PChar


3-75516           Alex22                2001-12-15 11:02  2002.01.24  
Базы данных


3-75503           Андрей1               2001-12-21 09:46  2002.01.24  
При инсталяции Oracle 7 (SQL Net Server) на W2KAS этот самый сервер отказывается становиться из-за невозможности удалить нт-сервис для sql-server.


14-75656          Lexus                 2001-11-28 17:31  2002.01.24  
Сохранение строк в текстовом файле и считывание их при последующем открытии программы?


3-75480           vasilly               2001-12-20 09:12  2002.01.24  
Как из дельфи изменить хранимую процедуру для IB6??? То что написано ниже не работает, хотя из консоли проходит при добавлении TERM