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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2015, 16:18   #11
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Вот я тупанул... Должен был сразу увидеть, старею...
Вы ж память под строку в Dll не выделяете! Вот и AV в программе.

Тогда для начала такой вопрос: Почему именно PAnsiChar? А не String например? Или буфер как в WinAPI-программах? Какие-то специальные цели или просто так?
ResourceSpace вне форума Ответить с цитированием
Старый 22.07.2015, 16:20   #12
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

У меня никаких ошибок не выскочило, за исключением List index of bound когда в листбоксе ничего не чекнул))
ДралсяСошибками вне форума Ответить с цитированием
Старый 22.07.2015, 16:33   #13
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от ResourceSpace Посмотреть сообщение
Тогда для начала такой вопрос: Почему именно PAnsiChar? А не String например? Или буфер как в WinAPI-программах? Какие-то специальные цели или просто так?
Вроде, вычитал, что для PAnsiChar и ShortString в отличие от остальных типов строк, память выделять не надо...
Цитата:
Указатели, выделения памяти и потоки для меня пока тёмный лес. Как поля в физике - что-то мифическое
Поэтому чтобы не было сразу две путанных темы попробовал обойтись без строк.
И если дело в этом - почему срабатывает на Алисе - Театр теней? И при отсутствии результата всегда срабатывает.
Ship_1 вне форума Ответить с цитированием
Старый 22.07.2015, 16:53   #14
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

А чёрт его знает, случайность. :3
Вот что вам нужно изучить: http://www.gunsmoker.ru/2009/01/blog-post.html
Простейший вариант - использовать WideString. Или как WinAPI: Func(lpBuf: PChar; nBufSize: Integer): Integer;
ResourceSpace вне форума Ответить с цитированием
Старый 22.07.2015, 16:54   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Вроде, вычитал, что для PAnsiChar и ShortString в отличие от остальных типов строк, память выделять не надо...
Для PxxChar надо. Для string нет.

Sharemem кстати почему не прописал?

Если оставить твою функу голой:
Код:
Function GetSongGrid(SongName:PAnsiChar; Limit:Integer{; ProcessVis:TProgressBar}):PAnsiChar; stdcall; export;

var i_site:Integer;
    ZaprKompozits,html,SongUrl,html2,TmpStr:String;

Begin


  Result:='';  TmpStr:='123';

      Result:=PChar(Result+TmpStr+#9+#13#10);

End;
Будет ли у тебя выдаваться ошибка?
I'm learning to live...

Последний раз редактировалось Stilet; 22.07.2015 в 17:07.
Stilet вне форума Ответить с цитированием
Старый 22.07.2015, 17:08   #16
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Для PxxChar надо. Для string нет.
Например, отсюда:
Цитата:
Следует воздерживаться от использования типа string в библиотечных функциях, т.к. при его использовании существуют проблемы с "разделением памяти". Подробней об этом можно прочитать (правда, на английском) в тексте пустого проекта DLL, который создает Delphi
Ну и аналогично в других местах.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Sharemem кстати почему не прописал?
Кто это?..

ResourceSpace, спасибо за совет, постараюсь...
Ship_1 вне форума Ответить с цитированием
Старый 22.07.2015, 17:09   #17
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Автор, попробуй так
Вложения
Тип файла: zip Алиса_театр_теней.zip (5.0 Кб, 7 просмотров)
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 22.07.2015, 17:14   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ну и аналогично в других местах.
Ну ты прочесть прочел, но так и не понял что да почему ))
Цитата:
Кто это?..
У тебя в исходнике библиотеки Делфи любезно вверху вставил обширный комментарий - вот почитай его. Там все сказано что нужно сделать для типа String.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2015, 17:39   #19
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

JUDAS РАБОТАЕТ!!! Правда, виндошибка один раз возникла, но при точно таком же повторном запросе её уже не было. Местные хаотические глюки, наверное...
Мне объяснит посоветованная выше статья что тут к чему?
Stilet
Да я читал... Но не понял... Я не силён в английском.
Цитата:
ShareMem must be the first unit in your library's USES
Мне просто добавить в USES проекта и dll ShareMem перед SysUtils? И всё? проблема со String и StringList будет решена?
Ship_1 вне форума Ответить с цитированием
Старый 22.07.2015, 17:45   #20
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Мне объяснит посоветованная выше статья что тут к чему?
К сожалению обращение к DLL идёт по стандарту который принят в С++, так как сама Винда написана на Си и Бейсике посему.
Как посоветовал Stilet - нужно было выделить некий постоянный буфер (переменная buff) для обмена информацией.
На входе, я принимаю указатель PAnsiChar и длиной size копирую в буфер строчку. Преобразовываю внтури функции в обычный string и работаю как нормальный человек . Результирующую строку, опять перевожу в С++ диалект, чтобы его ВИнда смогла вернуть в приложение методом обратного переноса результата в тот же массив. Предварительно массив очищаю.
Остальной код я не смотрел на предмет корректности ибо отвечал исключительно та вопрос темы.
---------------
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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