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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2010, 22:02   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Проблемы пеобразования Unicode to Char

Всем доброго времени суток.
Мне нужно считать с Edit строку и передать как аргумент функции FindWindow(). Аргумент функции принимает только char* тип, поэтому я попытался их преобразовать, на мой взгляд вроде все отлично но окно не хочет меня слушаться ибо я отлавливаю окно по заголовку, а значит и troubles с преобразованием.

Пробовал считывать моментом и сразу передавать на преобразование, собственно такой вариант у меня не прошел.

Попытка nr.1:
Код:
HWND hWnd;
UnicodeString FirstString = Edit1->Text;
hWnd = FindWindowA(FirstString.t_str(), NULL);
Здесь немного поиграв, после считывания я опять присваиваю Edit'у строку и только потом читаю строку в другую переменную и передаю её на преобразование.
Этот вариант у меня какой-то момент работал, если честно, но потом перестал - прям чудеса. Но, работал только в том случае, если я открывал дополнительную форму (В проекте используются две формы)


Попытка nr.2:
Код:
HWND hWnd;
UnicodeString FirstString = Edit1->Text;
Edit1->Text = FirstString;
SecondString = Edit1->Text;
hWnd = FindWindowA(SecondString.t_str(), NULL);
А такой вариант работает как часы: hWnd = FindWindowA("[Window Name]", NULL);

Последний раз редактировалось coNsept; 30.08.2010 в 22:05.
coNsept вне форума Ответить с цитированием
Старый 30.08.2010, 22:07   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

FindWindowW ?

Да и скорее всего этот Edit возвращает строку в соответствие с установленным макросом юникода. Так что расово верный способ, похоже: FindWindow
Carbon вне форума Ответить с цитированием
Старый 30.08.2010, 22:19   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Странно, FindWindowW работает, но почему?
К нему тоже требуется преобразование строки, из unicode в wchar...

Может кому пригодиться:
Код:
HWND hWnd;
UnicodeString FirstString = Edit1->Text;
Edit1->Text = FirstString;
SecondString = Edit1->Text;
hWnd = FindWindowW(SecondString.c_str(), NULL);

Последний раз редактировалось coNsept; 30.08.2010 в 22:22.
coNsept вне форума Ответить с цитированием
Старый 31.08.2010, 17:47   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

FindWindowW работает потому что это Unicode версия FindWindow. (чисто для справки, суффикс W указывает на то, что это Unicode версия, суффикс A - ANSI версия).
Конвертация нужна, потому что функции Win API работают с С стрингами, а не с С++ стрингами.
f.hump вне форума Ответить с цитированием
Старый 31.08.2010, 22:25   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
#ifdef _UNICODE
#define FindWindow FindWindowW
#else
#define FindWindow FindWindowA
#endif
Цитата:
С стрингами, а не с С++ стрингами.
А С++ "стринги" это class CString?
И все-таки стринги - это немножко другое. (string)
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.09.2010, 01:37   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

В моем понимании ситуации, деление довольно просто:

null-terminated array of char/wchar = C стринг

все остальные стринги, это С++ стринги
f.hump вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поинтер на unicode wide char как аргумент Sfuller Общие вопросы C/C++ 3 30.06.2010 18:51
Ошибка cannot convert from 'char *' to 'char [100]' Stellvertreter Общие вопросы C/C++ 5 30.05.2010 00:02
проблемы с Char и String в 2009 Delphi Kurai Помощь студентам 4 12.04.2010 14:56
Edit Показать/Скрыть пароль.. String и Char проблемы.. Человек_Борща Общие вопросы Delphi 2 10.04.2010 22:32
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17