| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Запуск файла *.chm из программы |
| Автор: Нитонисе 21.11.2011, 03:10 |
| Нужно из программы запустить файл справки *.chm. Когда работал в Buider 6, то функции WinExec и ShelExecute работали как надо. Сейчас же в Buider XE какая-то непонятка с типами параметров этих функций. То ему надо wchar_t, а я даю const char, то наоборот... Как правильно записать эти функции в Buider XE? |
| Автор: sawfish 21.11.2011, 06:42 | ||
У меня в XE не ругается. Запускаю вот так:
|
| Автор: borisbn 21.11.2011, 11:00 |
| ShelExecuteA( ... "help.chm" ... ) или ShelExecuteW( ... L"help.chm" ... ) или ShelExecute( ... TEXT( "help.chm" ) ... ) |
| Автор: Нитонисе 21.11.2011, 13:59 | ||||
А что у вас такое "hh" перед "help"? Сделал также - работает, но ведь эта команда ищет файл в текущей директории. А какая директория текущая в данный момент - неизвестно. Потому я хотел сделать так:
И получил две ошибки компилятора на второй строчке.
|
| Автор: xvr 21.11.2011, 14:28 |
Проблема известная. Алгоритм решения:
PS. Пользователи VS от MS прошли эту стадию в начале 2000г (когда вышла первая студия VS net 2003) |
| Автор: Нитонисе 21.11.2011, 14:39 |
И в чем просветление будет выражаться? |
| Автор: xvr 21.11.2011, 14:47 |
В том, что сообщения об ошибках типа Cannot convert 'wchar_t *' to 'const char *' и/или приведения типов в программе типа (LPWSTR)p будут сразу вызывать реакцию 'Опять этот гре$%#$# Unicode!' с последующим его отключением в настройках проекта (если это возможно). Следующей стадией будет осознанное использование Unicode'а везде вместо обычных char* строк (лично я до этой стадии пока еще не дошел И вообще, это самые часто посещаемые грабли, возникшие во всех IDE после принудительного введения туда проектов с включенным по умолчанию Unicode'ом |
| Автор: xvr 21.11.2011, 15:14 | ||||
Второе. Если проект предполагается использовать хоть где нибудь, за исключением личного компьютера разработчика, то вопрос языков в интерфейсе рано или поздно всплывет. И вот тогда 'будет мучительно больно', если об Unicode не подумали сразу |
| Автор: Нитонисе 21.11.2011, 15:49 |
| Так а что делать с функциями, которые хотят char? Заставить их работать нельзя? |
| Автор: borisbn 21.11.2011, 16:30 | ||||
|
| Автор: xvr 21.11.2011, 18:11 |
Использовать их эквиваленты, которые хотят Unicode. Можно, если очень приспичит (из Unicode'а можно получить char*, если повезет). Но лучше не надо |
| Автор: sawfish 21.11.2011, 19:21 | ||||||
hh - это виндовосинская утилита отображения справочной информации hh.exe. В качестве параметра ей передается файл справки. Для Семерки это вроде уже не катит. Для неизвестной текущей директории у меня работает такой код:
ну, или так:
Добавлено через 7 минут и 29 секунд Кста, http://forum.vingrad.ru/topic-332574.html была, там volatile подсказывает, чего можно сделать. |
| Автор: Нитонисе 23.11.2011, 12:49 |
| borisbn, ваши функции работают (только Shell...), но мне нужно не просто имя файла справки указать, а путь к ней. Помещаю путь в строку UnicodeString, но этот тип не воспринимется функцией ShellExecute. Функция преобразования c_str() не работает. |
| Автор: ZVano 25.11.2011, 15:12 | ||
Я делаю так.
|
| Автор: Нитонисе 29.11.2011, 15:50 |
| ZVano, действительно, так сработало. Странно... вроде же пробовал функцию w_str(), чего-то не срабатывало . |
| Автор: ZVano 1.12.2011, 16:50 | ||||
w_str() используется в паре с ShelExecuteW Вероятно, не срабатывало потому что использовалась функция ShelExecute или ShelExecuteA. Они ожидают Ansi, а получали Wide. Чтобы сработало нужно было использовать финт такого вида
PS: если вопрос решен - не поленитесь закрыть тему. |
| Автор: Нитонисе 3.12.2011, 17:06 | ||
Ну вот сейчас все сработало с функцией ShellExecute и w_str(); |