Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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]

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



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

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

Наверх




Память: 0.46 MB
Время: 0.004 c
3-75507
kserg@ukr.net
2001-12-14 12:12
2002.01.24
Как в MSSQL через INSERT вставить поле DATE


6-75633
Stepan
2001-11-01 22:23
2002.01.24
Поиск по сети сервера типа TServerSocket


14-75677
Jaya1
2001-11-30 20:14
2002.01.24
описание компонентов в Инете


1-75624
avr555
2002-01-08 16:44
2002.01.24
IDataObject


1-75607
Z
2002-01-06 23:08
2002.01.24
Два Exe шника обмениваются информацией





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