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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2011, 00:53   #1
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка Почему SendMessage -> WM_COPYDATA -> Poka摅皲摺皲8 ?

Код:
TO SEND
cd : TCopyDataStruct;
...
    cd.dwData := 0;
    cd.cbData := 1 + Length('Pokazat');
    cd.lpData := PChar('Pokazat');
    SendMessage ( FindWindow(nil, 'myForm'), WM_COPYDATA,  0, LParam(@cd));

TO RECEV
pcd : PCopyDataStruct;
...
  pcd := PCopyDataStruct(Msg.LParam);
  Memo1.Lines.Add(PChar(pcd.lpData));
Цитата:
Pokazat
приходит вот так:
Цитата:
Poka摅皲摺皲8
P.S. Windows7 Ultimate Rus, Текущии язык програм, не поддерживающих Юникод: Русскии, DelphiXe
VirusN13

Последний раз редактировалось ArtGrek; 18.04.2011 в 00:56.
ArtGrek вне форума Ответить с цитированием
Старый 18.04.2011, 01:13   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

мэйби http://www.delphisources.ru/pages/fa...m_cd_link.html
Человек_Борща вне форума Ответить с цитированием
Старый 18.04.2011, 01:16   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Потому что SizeOf <> Length.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 18.04.2011, 01:38   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Потому что SizeOf <> Length.
заменил на
Код:
cd.cbData := SizeOf('Pokazat');
результат тот же
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.04.2011, 01:43   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
cd.cbData := (1+Length('Pokazat'))*SizeOf(Char);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.04.2011, 01:50   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
cd.cbData := (1+Length('Pokazat'))*SizeOf(Char);
спасибо, понял в чем дело
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.04.2011, 06:01   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
заменил на
Код:
cd.cbData := SizeOf('Pokazat');
результат тот же
Некоторые намёки не надо воспринимать буквально. Думать иногда полезно.

Ещё полезнее читать документацию, а не тупо копировать код:

Цитата:
cbData
DWORD
The size, in bytes, of the data pointed to by the lpData member.
Кстати, это можно сообразить, даже не смотря в документацию: ведь сообщение передаёт произвольные данные ("данные вообще"), а не просто/только строки.

Несложно сообразить, что размер произвольных данных в символах строки мерить не получится.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 18.04.2011, 09:43   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

количество символов умножить на размер выделяемои памяти для каждого символа типа Char, что б получить общии размер
я понял, просто сразу не сообразил, когда менял местами Length c SizeOF
Цитата:
Потому что SizeOf <> Length.
написали б уже SizeOf * Length
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметры SendMessage Jenya Win Api 4 11.12.2010 19:15
SendMessage/PostMessage evil29a Win Api 9 25.11.2010 21:48
SendMessage Damien4Damien Общие вопросы Delphi 3 29.09.2010 21:27
SendMessage ASЯ Помощь студентам 0 20.05.2010 10:38
Проблема получением сообщения WM_COPYDATA kleop Win Api 0 12.03.2010 21:58