Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2015, 17:54   #21
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Остальной код я не смотрел на предмет корректности ибо отвечал исключительно та вопрос темы.
Ну этого и хватило, чтоб хоть как-то работало С нюансами буду разбираться постепенно.
Забыл спросить: size выбирать исходя из чего? (я поставил 256)
Ship_1 вне форума Ответить с цитированием
Старый 22.07.2015, 18:30   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И всё? проблема со String и StringList будет решена?
По идее да. Я давно уже не работал со строкам в ДЛЛ, так что точно не скажу. Но ИМХО у тебя проблема не в этом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2015, 19:25   #23
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
Забыл спросить: size выбирать исходя из чего?
size - это максимально возможная длина строки которая подаётся на вход процедуры. В принципе, можно выделить резиновый массив внутри функции, но точно не могу гарантировать, что при передаче управления этот массив будет валидным в приложении.

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
(я поставил 256)
я выделил буфер в 1024 байта внутри ДЛЛ, если мало можешь выделить больше.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 22.07.2015, 22:06   #24
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

JUDAS, а кто память освободит, утечек не боитесь? И стандарты С++ тут не при чём. Просто в DLL и EXE разные менеджеры памяти.
Цитата:
Как посоветовал Stilet - нужно было выделить некий постоянный буфер
Про буфер не он говорил, а я. И буфер надо в программе и выделять и освобождать, а не в Dll. В ней только заполнять.

По ссылке которую я давал описаны и первопричины и все методы устранения. В том числе ShareMem (когда он работает и когда он не работает).
Описано очень просто, вовсе не обязательно досконально знать указатели и прочее, просто вдумчиво медленно прочтите от начала и до конца.

Цитата:
Забыл спросить: size выбирать исходя из чего? (я поставил 256)
Из потребностей. Но лучше чтоб не морочить голову - используйте WideString. Или передавайте класс TStrings, как предложил Stilet. Тогда никаких size не понадобится.

А ещё лучше - GetSongGrid() будет возвращать String и не будет экспортироваться. Зато будут экспортироваться функции-обёртки, передающие ответ программе разными способами.
ResourceSpace вне форума Ответить с цитированием
Старый 22.07.2015, 22:17   #25
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

ResourceSpace, в целом с тобой согласен за исключением одного нюанса.
Код:
И буфер надо в программе и выделять и освобождать, а не в Dl
В коде автора, результирующая строчка считывается с какого то внешнего ресурса через северный скрипт и склеивается с входной строкой. В придачу, автор желает вернуть строку как результат функции.
Исходя из этих двух требований автора, выделение места (статическое !) выполняется внутри самой ДЛЛ.

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

п.с. судя по скрипту, он подаёт на вход название песни, а возвращает то ли слова песни, то ли её описание, размер которого неизвестен.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 23.07.2015, 11:41   #26
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

?? Решил попробовать с TStringList, добавил в Uses ShareMem/
И получил сообщение:
Цитата:
[Fatal Error] Project2.dpr(16): File not found: 'ShareMem.dcu'
И чего теперь с этим делать?

И, если не затруднит: как наиболее просто "вытащить" из DLL уровень выполнения процесса (организовать ProgressBar в EXE, показывающий процесс выполнения цикла в DLL)?

Последний раз редактировалось Ship_1; 23.07.2015 в 13:35.
Ship_1 вне форума Ответить с цитированием
Старый 23.07.2015, 19:56   #27
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
Лампочка

Та не надо никаких ShareMem. Выбирайте из остальных трёх вариантов.
Цитата:
как наиболее просто "вытащить" из DLL уровень выполнения процесса
Вы же скачиваете файл - у вас большая часть времени уходит на это. Но вы не узнаёте размер файла, а просто качаете пока он не закончится (не зная объём).
А поиск у вас ограничен и тем что на web-странице выдаётся и параметром, заданным вручную. И заранее неизвестно сколько на странице.
В таких условиях не получится ProgressBar. А вообще передаёте в Dll указатель на процедуру из Exe, меняющую положение ProgressBar, а внутри Dll через неё указываете сколько % готово.

Подправил мелкие опечатки, добавил пару штук, надеюсь пригодятся.

P.S. Исчио статиа: http://www.gunsmoker.ru/2008/12/1.html
Вложения
Тип файла: zip t=280768.zip (429.7 Кб, 8 просмотров)

Последний раз редактировалось ResourceSpace; 23.07.2015 в 20:20. Причина: P.S.
ResourceSpace вне форума Ответить с цитированием
Старый 24.07.2015, 11:22   #28
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

У меня, вобщем-то, скачивается только код страницы, которую я обрабатываю, удаляя части от начала до определённого вхождения текста. К оставшейся длине полученного кода я и хотел "прикрутить" прогресс (стартовая длина минус оставшаяся).
А Ваше приложение у меня ругается: TSpinEdit not found.

Последний раз редактировалось Ship_1; 24.07.2015 в 11:49.
Ship_1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access violation at address XXXXXX in module 'YYYYYY'. Read of address ZZZZZZ' nik-kang Помощь студентам 0 18.06.2012 22:22
Ошибка: "Access violation at address 0045E503 in module 'Project1.exe'. Read of address 00316777. Katexxxsa Общие вопросы Delphi 1 03.10.2011 23:16
Access violation at address 004733C4 in module 'loginin.exe'. Read of address 00000048' pavellyba Общие вопросы Delphi 2 18.08.2011 10:32
Access violation at address 00447E73 in modul Project.exe. Read of address 00000057. ArtGrek Общие вопросы Delphi 40 12.03.2011 22:03
Access violation at address 00478D0E in module 'Project1.exe'. Write of address 00000000 fondreykus-1 Общие вопросы Delphi 5 27.01.2010 14:25