![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
erm0l0v |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Мне нужно отправить сообщение.
Загружаю SendMessage
Отправляю сообщение
Сообщение приходит, но вот значение параметра wParam Совершенно не предсказуемо. В чем может быть ошибка? |
||||
|
|||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Кстати, забыл добавить сообщение ловит программа написанная на Delphi
Только что попробовал отправить сообщение WM_SETTEXT все сработало нормально. Есть предположение что косяк в преобразовании из string C# в String Delphi. Пробовал слать это же сообщение из C++ все работает нормально. (Доступа к исходным кодам на Delphi нет) единственно что нашел в документации есть пример как отправлять это сообщение из Delphi там у них строка преобразуется так:
|
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Покажите код на C++. Скорей всего там у вас анси строк, а здесь юникод (по дефолту). В дельфийской проге кастится к анси строке (указателю, но не суть). |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
На C++ отправляю так:
Я не думаю что проблема с кодировкой, он каждый раз выдает разные символы. Если бы проблема была с кодировкой то думаю что символы были бы одни и теже |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Попробуй маршалинг как анси строки для начала.
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
Правильная сигнатура должна быть такой: (http://www.pinvoke.net/default.aspx/user32.sendmessage)
там же примеры как маршалить автоматически -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Что значит "правильная"? wParam/lParam на практике интерпретируются по разному. В принципе - делать вызовы Marshal.XxxToXxx в коде или прописать нужные типы и пр. сразу - не суть важно.
Вопрос собственно в том, как интерпретируются параметры в приложении, принимающем сообщения. |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
wparam по сути это ни что иное как ссылка на тип PCHAR. Именно к этому C# должен преобразовать string в конечном итоге, что он успешно делает при отправке сообщения WM_SETTEXT
А при отправке сообщения WM_WINPOST_PRINTREPORT в WinPost (и есть та самая программа на Delphi) все вместо того текста который нужен отображается что то непонятное. Чаще всего пустое поле, или 2 - 3 символа. Причем отображает каждый раз разные символы при одинаковых начальных условиях. Такое впечатление что ссылка которая дошла в WinPost указывает куда угодно, но только не на мою строку. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Не. Вообще говоря это просто 32-битный параметр. Как он интерпретируется - другой вопрос ![]() Попробуй всё-таки явно прописать маршаллинг как LPStr. |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Я сделал так:
лучше не стало, пробовал преобразовать так Marshal.StringToXxx тоже не получилось. Может я просто не правильно использую Marshal? |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Хм. Тогда не знаю точно :(
А есть возможность выложить/прислать клинетское приложение? |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Вот мой код.
Он запускается из dll для WinPosta как процесс. Сам WinPost 107 MB можно взять здесь Программу можно протестировать так: В WinPost: Новый Клиент -> Услуги -> Внешний Модуль -> Пример подключаемого модуля После этого можно запустить программу, по идеи будет работать так же как если бы она была запущена из dll. Во вложении я скинул свою программку, исходный код которой приведен выше. Присоединённый файл ( Кол-во скачиваний: 11 ) ![]() |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Все проблему решил.
Я переделал C# код в dll (правда очень корява, путём пере компилирования dll в il и обратно) |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |