![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
![]()
Вобщем суть в том что нужно из одно приложения в другое передать строку с помощью создания подгрузки файла в память, FileMapping.
Саму прогу написал, но строку не передает, точней передает иероглифы, в чем ошибка ? Вот листинг: Клиент: Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
![]()
Попробуйте AnsiString и PAnsiChar.
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Ыыыыыы.... это крайне интересная логика копирования. Указывать чужой программе в своё адресное пространство, доступа к которому у чужой программы нет.
Читаем мат-часть: Что такое память программы. Как работают с PChar. Если хотите кратко понять суть, то вот здесь - читать секцию "проецируемые файлы" и вот это (ключевые слова "это не скопирует текст 'Delphi' в массив A").
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось GunSmoker; 25.01.2012 в 19:06. |
![]() |
![]() |
![]() |
#4 |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
![]()
Не понял, почему чужой программе ? Если определить переменную типа integer, и передавать ее то все прекрасно работает, вся проблема именно в преобразовании чара в стринг...
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Нет, друг, проблема не в преобразовании, а в непонимании фундаментальных основ.
Если тебе лень читать ссылки, можем сыграть в игру. Наводящий вопрос: сколько байт занимает TDataRecord?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#6 |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
![]()
Мне то не лень, этим я сейчас и занимаюсь. Играть в игру мне рановато, ибо дэлфи я изучаю 2й месяц, а это пример из выданной методички. И не пойму почему инт передает а со строками такие проблемы ?
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Это вообще для себя или для учёбы? Если второе, то я и лезть не буду, а если хочется разобраться, то могу подкидывать материал.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#9 |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
![]()
Спасибо за ссылки, попытаюсь разобраться .
Проблема в передачи неправильной длинны строки, я правильно понял ? Последний раз редактировалось Stilet; 25.01.2012 в 21:42. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Нет. Проблема в том, что вы вообще строку не передаёте.
Строки - это динамические данные (не важно, PChar или String), потому что они могу иметь произвольный размер. Любые динамические данные суть указатель. Указатель - это когда данные располагаются не в переменной. Переменная лишь указывает на данные. Поэтому, TDataRecord имеет размер 2 * SizeOf(Pointer) - 8 байт. При всём желании в 8 байт строку уместить физически невозможно. Поэтому, когда вы передаёте между программами TDataRecord - вы передаёте указатели, но не данные. Понятно, что указатели на данные программы в другой программе лишены смысла. Ну, это как если бы я вставил в свою машину флешку, скинул бы на неё ярлыки (а не файлы) и перенёс на вашу машину - без исходных файлов (данных) ярлыки (указатели) бесполезны. Вот откуда у вас мусор - указатели указывают на "что-то", но это "что-то" - в другой программе, не вашей. А в вашей по этим адресам лежит что-то совершенно другое - ваши данные.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как перевести Pchar в string? | green-shrek | Помощь студентам | 3 | 07.04.2010 19:01 |
гарантированный перевод string в PChar | Пепел Феникса | Общие вопросы Delphi | 2 | 21.09.2009 11:44 |
String to PChar | D7_beginner | Общие вопросы Delphi | 2 | 21.11.2007 14:05 |
проблема перевода (PChar и string) | Fireleo | Общие вопросы Delphi | 4 | 29.07.2007 08:14 |
Как из string получить PChar??? | sis | Компоненты Delphi | 4 | 11.02.2007 16:58 |