Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> указатель на строку 
:(
    Опции темы
bagos
Дата 2.2.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: 1
Всего: 1



ловлю сообщение 
procedure TForm1.handlenewdata(var message: TMessage);
var
 data: ^string;
begin
  Integer(@data) := message.wparam;
  lst1.Items.Add(string(data));
end;

код неправильный, с указателями траблы:( что не так? ткните носом!
PM MAIL   Вверх
SneG0K
Дата 2.2.2009, 15:10 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 3
Всего: 54



А в чем именно проявляется ошибка?
В Delphi7 я заметил, что integer криво преобразовывает.
И ты пытаешся в указатель на string запихнуть integer
PM WWW Skype   Вверх
Rrader
  Дата 2.2.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Все неверно - память для строки не выделена, информации о символах (содержимом) нет (на их месте мусор). Фактически ты передаешь одно число, а надо массив. А для этого уже следует использовать помощь Windows smile 

Строки можно передавать через WM_COPYDATA.

P.S.
Забыл сказать, это касается IPC. Для своего процесса все попроще smile 

Это сообщение отредактировал(а) Rrader - 2.2.2009, 15:49


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Alexeis
Дата 2.2.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



data - это сам по себе указатель на указатель (строка это указатель). А операция взятия адреса даст указатель на указатель на указатель smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
marinovsoft
Дата 2.2.2009, 15:21 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 25.1.2009
Где: Кемерово

Репутация: нет
Всего: нет



Зачем такой запутанный код?
Может лучше так
Код

procedure TForm1.handlenewdata(var Message1: TMessage);
var
 data: string;
begin
  data:=IntToStr(Message1.WParam);
  lst1.Items.Add(data);
end;

Удачи
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 2.2.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



marinovsoft, и что? В строку запишется значение адреса smile . Кому это нужно? 

bagos, чтобы ответить на вопрос как принять строку нужно сначала увидеть как ее туда заносили в параметр wparam


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Frees
Дата 2.2.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(marinovsoft @  2.2.2009,  17:21 Найти цитируемый пост)
Зачем такой запутанный код?Может лучше так

глупость помоему

Код

procedure TForm1.handlenewdata(var Message1: TMessage);
var
 data: string;
begin
  data:=string(Message1.WParam);
  lst1.Items.Add(data);
end;


но тут надо смотреть как ты в Message1.WParam засовываеш строку


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
marinovsoft
Дата 2.2.2009, 17:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 25.1.2009
Где: Кемерово

Репутация: нет
Всего: нет



Цитата
marinovsoft, и что? В строку запишется значение адреса  . Кому это нужно? 


В wParam лежит адрес строки???
Я не телепат. Мало ли кто что "накодил"
тогда 
Цитата

bagos, чтобы ответить на вопрос как принять строку нужно сначала увидеть как ее туда заносили в параметр wparam
 

PM MAIL WWW ICQ   Вверх
bagos
Дата 2.2.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: 1
Всего: 1



Никак еще не заносил, мне то как раз и надо все это сделать, занести указатель на строку в wparam, и потом прочитать строку.
Спасибо ответившим!

Добавлено через 14 минут и 57 секунд
заношу вот так:
Код

Var p: PAnsiChar;
GetMem(p,1000);
p:='Hello, my dear window.';
SendMessage(wnd,WM_USER+1111, 0 ,dword(p));

PM MAIL   Вверх
bagos
Дата 2.2.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: 1
Всего: 1



  data:=inttostr(Message.WParam);

выдает все нулиsmile

может заношу неправильно?
PM MAIL   Вверх
bagos
Дата 2.2.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: 1
Всего: 1



var
data: PChar;
begin
data := PChar(Pointer(message.LParam)^);
lst1.Items.Add(data)


заработало)))
PM MAIL   Вверх
marinovsoft
Дата 2.2.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 25.1.2009
Где: Кемерово

Репутация: нет
Всего: нет



Немного поздновато, но все же...
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
   MY_MESSAGE = WM_USER + 4242;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    lst1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  procedure handlenewdata(var message1: TMessage);message MY_MESSAGE;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.handlenewdata(var message1: TMessage);
var
 data: PChar;
begin
  data := PChar(message1.lparam);
  lst1.Items.Add(data);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   txt: string;
 begin
   txt := 'Hello World';
   SendMessage(Form1.Handle, MY_MESSAGE, 0, DWORD(PChar(txt)));
end;

end.

PM MAIL WWW ICQ   Вверх
bagos
Дата 2.2.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: 1
Всего: 1



Спасибо! Это лучше smile

Добавлено через 11 минут и 3 секунды
А как быть в записями?
создаю запись

Код

type
  TRecord = Record
    name : string[50];
    tema : string[150];
  end;

var
    MyRec : ^TRecord;  

...
myrec.name := 'Anton';
myrec.tema := 'xz';



как в этом случае послать через указатель запись?
PM MAIL   Вверх
bagos
Дата 2.2.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: 1
Всего: 1



пытаюсь так:


Код

type
  PTMyRecord=^TMyrecord;
  TMyRecord = Record
    name : string[50];
    tema : string[150];
  end;

procedure TForm1.handlenewdata(var message: TMessage);
var
  xz:TMyRecord;
begin
 xz := PTMyRecord(message.WParam);  ругается
 ShowMessage(xz^.Str);
 Dispose(xz); 
end;




PM MAIL   Вверх
MetalFan
Дата 2.2.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



автор пытается передать данные внутри своего приложения или между приложениями?
если внутри - то последовательность такая:
выделил память, заполнил данными, отослал указатель.
принял указатель, прочитал данные, освободил память.
это общий случай.
в данных муках с записью сделано несколько ошибок. неправильное приведение типа, и Dispose непонятно на что.

Добавлено через 1 минуту и 7 секунд
кстати, marinovsoft привел некрасивый пример, использование которого в общем случае может привести к AV или порче данных.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1244 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.