Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 26.12.2012, 22:53   #1
The Catalyst
 
Регистрация: 01.12.2011
Сообщений: 9
По умолчанию использование GetDriveType

Здравствуйте!
Хочу, что бы при выборе диска в comboBox1 о нем выдавалась информация. Подключенные диски получил функцией GetLogicalDrives()
Код:
int n;
    char dd[5];
    DWORD dr = GetLogicalDrives();
 
    for( int i = 0; i < 26; i++ )
    {
        n = ((dr>>i)&0x00000001);
        if( n == 1 ) 
        {
            dd[0] =  char(65+i);
                dd[1] = ':'; 
                    dd[2] = '\\' ; 
                        dd[3] = '\\';
                            dd[4]=0;
            
            this->listBox1->Items->Add(gcnew System::String(dd));
            this->comboBox1->Items->Add(gcnew System::String(dd));
        }
    }
тип диска определяю кодом:
Код:
int d=0;
    String ^s= this->comboBox1->Text;
    TCHAR disc[20];
 
    d = GetDriveType((LPCWSTR)&disc);
    if( d == DRIVE_UNKNOWN ) this->label44->Text =" UNKNOWN" ;
    if( d == DRIVE_NO_ROOT_DIR ) this->label44->Text =" DRIVE NO ROOT DIR" ;
    if( d == DRIVE_REMOVABLE ) this->label44->Text = " REMOVABLE" ;
    if( d == DRIVE_FIXED ) this->label44->Text =" FIXED";
    if( d == DRIVE_REMOTE ) this->label44->Text =" REMOTE";
    if( d == DRIVE_CDROM ) this->label44->Text =" CDROM" ;
    if( d == DRIVE_RAMDISK ) this->label44->Text =" RAMDISK" ;
Возникли вопросы:
1) как правильно преобразовать String ^s в TCHAR d[256]
2) как в строку d = GetDriveType((LPCWSTR)&disc); правильно вписать переменную disc, что б все правильно работало
Помогите кто чем может

Последний раз редактировалось Stilet; 05.01.2013 в 12:40.
The Catalyst вне форума   Ответить с цитированием
Старый 04.01.2013, 08:35   #2
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Для преобразования из string в char используй s.c_str().
По c_str() тут:
http://www.programmersforum.ru/showthread.php?t=180282
или тут:
http://www.cplusplus.com/reference/string/string/c_str/

Переменная disc создается в ASCII, а по ходу используется unicode. Тут либо проект собирать в Character set = Not set или Multi-Byte или вызывать GetDriveTypeA. Можно конечно и ASCII в unicode перевести, но это кому как удобнее.
Tahoma вне форума   Ответить с цитированием
Старый 04.01.2013, 11:12   #3
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

#ifndef INICODE
#define siring std::string
#else
#define siring std::wstring
#endif

и забудьте о unocodax
c_str() возвратит ссылку const TCHAR* или LPCTSTR. одно и тоже.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума   Ответить с цитированием
Старый 05.01.2013, 07:57   #4
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
#ifndef INICODE
#define siring std::string
#else
#define siring std::wstring
#endif

и забудьте о unocodax
c_str() возвратит ссылку const TCHAR* или LPCTSTR. одно и тоже.
Не получится забыть. Думаю у человека и возникла трудность в том, что disc объявлен как LPCTSTR, а функция d = GetDriveType((LPCWSTR)&disc); использует LPCWSTR. По этому и предлагал весь проект пересобрать в Not set. Или вызывать GetDriveTypeA.
Tahoma вне форума   Ответить с цитированием
Старый 05.01.2013, 20:43   #5
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Tahoma Посмотреть сообщение
Не получится забыть. Думаю у человека и возникла трудность в том, что disc объявлен как LPCTSTR, а функция d = GetDriveType((LPCWSTR)&disc); использует LPCWSTR. По этому и предлагал весь проект пересобрать в Not set. Или вызывать GetDriveTypeA.
Все функции не имеют префикса ни A ни W, выполнены они именно таким способом. TChar тоже также... поэтому если правильно проект построить... Проблема уходит на нет. TCHAR это CHAR или WCHAR в зависимости от выбранной кодировки проекта. А так вы правы... мудрить не мудрено...
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование Uses kettanaito Общие вопросы Delphi 24 03.06.2012 21:03
Использование If Macklay PHP 4 14.05.2012 20:03
Использование (...) в с++ Byurrer Общие вопросы C/C++ 12 06.04.2011 23:04
GetDriveType для виртуального диска возвращает DRIVE_CDROM Don Karleone Общие вопросы Delphi 2 20.02.2011 05:15
Использование while и while do prikolist Общие вопросы C/C++ 20 06.04.2009 18:40