![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 03.01.2009
Сообщений: 116
|
![]()
Коллеги. Не подскажет ли кто - в какую сторону можно посмотреть. Есть вот такой код (delphi XE) работы с AT-модемом.
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Ошибка здесь:
Код:
И для FreeMem не надо явно указывать размер высвобождаемой памяти, он сам это делает. |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]()
Это лихо вы PString пользуете, думаете не String и в DLL проканает?
TempS - тип какой? string? если да то что для вас такое string? указатель на массив символов? - нет нет и нет... это указатель на структуру типа StrRec для удобства значение смещено на SizeOf(StrRec) чтоб сразу полезные данные шли в 7дельфе строка это StrRec = packed record refCnt: Longint; length: Longint; end; в вашей реализации псевдо строки этого нет что при выполнении Res^:=TempS; все ломает
Не стесняемся, плюсуем!
![]() Последний раз редактировалось Slym; 22.01.2013 в 15:10. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 03.01.2009
Сообщений: 116
|
![]() |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]() Код:
использование Код:
Не стесняемся, плюсуем!
![]() |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
а ещё выкинуть STRING из проекты и использовать PChar или WideString или же использовать STRING и таскать с собой SHAREMEM
|
![]() |
![]() |
![]() |
#7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 03.01.2009
Сообщений: 116
|
![]()
Slym, у меня тогда несколько уточняющих вопросов и замечаний:
1) Где указан запрет на работу со строчными ссылочными типами таким образом? p:=^.. (ну хранится указанная Вами структура с отрицательным смещением от адреса переменной и данных, ну разная эта структура для юникода и анси. И что? Язык и логика работы с указателями вроде в этом смысле остаются прежними). 2) Эта проблема была и в доюникодовом d2007 (первоначально библиотека писалась под ним). 3) Проблема есть только для строк размером 2-6 (примерно) символов, она ни одного раза не проявилась на строках большей длины, а длина там бывает на порядок-два больше. Последний раз редактировалось Антон Ю.Б.; 22.01.2013 в 19:52. |
![]() |
![]() |
![]() |
#9 | |||
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]() Цитата:
Код:
Цитата:
Цитата:
[память] строка1строка2 операция со строка2 приведет к порче строка1, т.к. по месту должны быть поля RefCount и Length [память] 0010007строка2 или же авто освобождение compiller magic строки строка2 вызовет FreeMem ока1 - байт (поле Length) что гораздо больше 7 байт или не вызовет вовсе т.к. RefCount 0стр - больше 0
Не стесняемся, плюсуем!
![]() Последний раз редактировалось Slym; 23.01.2013 в 06:03. |
|||
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]()
у тебя работает этот код?
Код:
![]()
Не стесняемся, плюсуем!
![]() Последний раз редактировалось Slym; 23.01.2013 в 06:21. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выделение памяти | Blind Guard | Общие вопросы C/C++ | 22 | 06.06.2012 19:48 |
Распределение памяти. Динамическое выделение памяти с++ | Tolian92 | Помощь студентам | 8 | 14.05.2012 21:44 |
Определить SIZEMEM у DLL(Размер dll в памяти процесса) | Человек_Борща | Общие вопросы Delphi | 6 | 22.07.2011 20:54 |
Выделение памяти в С++ | Dj-IIyIIc | Общие вопросы C/C++ | 4 | 18.10.2010 14:39 |
выделение памяти | Артем1256 | Общие вопросы C/C++ | 1 | 13.11.2009 16:38 |