Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / открыть файл. С++ Builder / 14 сообщений из 14, страница 1 из 1
15.01.2018, 15:03
    #39584478
Anatoliy S.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Код: plaintext
1.
2.
AnsiString open_file = Dir_gr+"\\hintgrdostupa.txt";
   ShellExecute(Handle,"open",open_file.c_str(),NULL,NULL,SW_SHOWDEFAULT);



Код: plaintext
1.
2.
3.
4.
ошибка:
[bcc32 Error] Unit1_RightEndDoor.cpp(596): E2034 Cannot convert 'char const[5]' to 'const wchar_t *'
  Full parser context
    Unit1_RightEndDoor.cpp(593): parsing: void _fastcall TMF_RightEndDoor::Label47Click(TObject *)
...
Рейтинг: 0 / 0
15.01.2018, 15:06
    #39584482
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Ну какой чудак будет пытаться скармливать ANSI строку туда, где хотят UNICODE?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.01.2018, 15:15
    #39584492
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
На мысли наводит?
SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters,
LPCSTR lpDirectory, INT nShowCmd);
SHSTDAPI_(HINSTANCE) ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters,
LPCWSTR lpDirectory, INT nShowCmd);
#ifdef UNICODE
#define ShellExecute ShellExecuteW
#else
#define ShellExecute ShellExecuteA
#endif
...
Рейтинг: 0 / 0
15.01.2018, 15:41
    #39584518
Anatoliy S.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
можно просто поправить код, без чудаков...
я понял по ошибке что дело в типе данных, но не догоню как правильно.

пробовал вместо AnsiString wchar_t, все равно не получилось, как должна быть правильная конструкция конвертации в данном примере?

Код: plaintext
1.
2.
3.
const wchar_t open_file = Dir_gr+"\\hintgrdostupa.txt";

   ShellExecute(Handle,"open",open_file.c_str(),NULL,NULL,SW_SHOWDEFAULT);
...
Рейтинг: 0 / 0
15.01.2018, 16:01
    #39584541
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Правильно м.б. по-разному.
Пробуй так в головном посте
UnicodeString( open_file.c_str() )
потом скажешь.
...
Рейтинг: 0 / 0
15.01.2018, 16:08
    #39584548
Anatoliy S.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
//AnsiString open_file = Dir_gr+"\\hintgrdostupa.txt";
//UnicodeString(open_file.c_str());
//  ShellExecute(Handle,"open",open_file.c_str(),NULL,NULL,SW_SHOWDEFAULT);

[bcc32 Error] Unit1_RightEndDoor.cpp(626): E2034 Cannot convert 'char const[5]' to 'const wchar_t *'
  Full parser context
    Unit1_RightEndDoor.cpp(621): parsing: void _fastcall TMF_RightEndDoor::Label47Click(TObject *)
...
Рейтинг: 0 / 0
15.01.2018, 16:41
    #39584587
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Ох, боже мой ... cтудент начинает путаться и его можно легко добить ...

Bместо просто
ShellExecute( .......... open_file.c_str()
поставь там конвертацию:
UnicodeString( open_file.c_str() )
...
Рейтинг: 0 / 0
15.01.2018, 17:28
    #39584620
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
В общем, ладно, только теперь мне некогда смотреть.
Сказано выше: параметр ожидает такой-то тип. Значит этот тип туда и надо доставить.

Не знаю твои настройки и что там за тип такой у Dir_gr ? Копай от этого
//AnsiString open_file = Dir_gr+"\\hintgrdostupa.txt";
wchar_t *pathChar = UnicodeString(path).w_str();
// ShellExecute(Handle,"open", pathChar ,NULL,NULL,SW_SHOWDEFAULT);
...
Рейтинг: 0 / 0
15.01.2018, 18:50
    #39584660
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
exp98wchar_t *pathChar = UnicodeString(path).w_str();

И получаем указатель на уже освобождённую память. Прелестные грабли.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.01.2018, 19:17
    #39584674
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Anatoliy S.
Код: plaintext
1.
2.
AnsiString open_file = Dir_gr+"\\hintgrdostupa.txt";
   ShellExecute(Handle,"open",open_file.c_str(),NULL,NULL,SW_SHOWDEFAULT);



Код: plaintext
1.
2.
3.
4.
ошибка:
[bcc32 Error] Unit1_RightEndDoor.cpp(596): E2034 Cannot convert 'char const[5]' to 'const wchar_t *'
  Full parser context
    Unit1_RightEndDoor.cpp(593): parsing: void _fastcall TMF_RightEndDoor::Label47Click(TObject *)


Из того что приведено в тексте под тип char const[5] подходит "open", видимо там ожидается юникодовая версия, тогда _T("open").
Ну и заодно чтобы два раза не бегать, видимо не AnsiString, а юникодовая версия, предположительно WideString.
...
Рейтинг: 0 / 0
16.01.2018, 11:58
    #39584950
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Dimitry SibiryakovПрелестные грабли Уупс, есть косяк. А на то и щука в море ... Я думаю, ТС уже сообразит(л), как можно без граблей.
Кстати, я в первый раз так написал (и без злого умысла).
...
Рейтинг: 0 / 0
16.01.2018, 13:29
    #39585071
Anatoliy S.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
получилось так:
Код: plaintext
1.
2.
UnicodeString open_file = "D:\\hintgrdostupa.txt";
  ShellExecute( Handle, L"open", open_file.w_str(), NULL, NULL, SW_RESTORE );



вот так ошибок нет, но не открывается файл.
Код: plaintext
1.
2.
UnicodeString open_file = "D:\\hintgrdostupa.txt";
ShellExecute(Handle,(const wchar_t *)"open",(const wchar_t *)open_file.c_str(),NULL,NULL,SW_SHOWDEFAULT);
...
Рейтинг: 0 / 0
16.01.2018, 13:41
    #39585087
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
Anatoliy S.вот так ошибок нет, но не открывается файл.

И это правильно, ибо "(const wchar_t *)"open"" это бредовый бред. Тебе надо изучать как
работают компьютеры, что такое биты, байты и как они интерпретируются.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.01.2018, 14:57
    #39585155
Anatoliy S.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть файл. С++ Builder
авторТебе надо изучать как
думаю согласен....

авторИ это правильно, ибо "(const wchar_t *)"open"" это бредовый бред.

делаю чисто по примерам, не вдаваясь в конструкции и назначение.


P.S.
помню несколько лет назад (10лет).
в 5м билдере все работало без данных переводов.

Да и писалось на С++ Builder5 по ощущению с Builder 10.2 легче. Правда писал не долго год/полтора.
Потом отошел от ПК вообще. Ну и тогдашний опыт небольшой пару лет, только институт окончил. была эйфория и чтение было легче нового.
Купил бы книгу по RAD Studio сейчас, да нету. Раньше нравились книги Архангельского.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / открыть файл. С++ Builder / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]