Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    dB6



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to all
    Народ, подсобите, столкнулся с маленькой проблемкой. Пишу сейчас одну прожку в Билдере 6-ом и понадобилось узнать размер разделов.  

    Код:
     
      DWORD FreeBytesAvailable;
      DWORD TotalNumberOfBytes;
      DWORD TotalNumberOfFreeBytes;
     
      BOOL GetDiskFreeSpaceFlag = GetDiskFreeSpaceEx(
      "c:\\",  // directory name
      (PULARGE_INTEGER)&FreeBytesAvailable,     // bytes available to caller
      (PULARGE_INTEGER)&TotalNumberOfBytes,     // bytes on disk
      (PULARGE_INTEGER)&TotalNumberOfFreeBytes  // free bytes on disk
     );
     

    Так вот, когда компилю, билдер начинает ругаться ошибкой E2015, типа "неоднозначность применения", если я не путаю.  

    Цитата:
     E2015 Ambiguity between '__stdcall GetDiskFreeSpaceEx(const char *,_ULARGE_INTEGER *,_ULARGE_INTEGER *,_ULARGE_INTEGER *)' and 'Sysutils::GetDiskFreeSpaceEx'
     
     
    Так вот, вопрос. Как от этого бага избавиться?

    Всего записей: 408 | Зарегистр. 09-02-2003 | Отправлено: 22:20 21-08-2004 | Исправлено: dB6, 22:24 21-08-2004
    vndovr

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Swappp
    От 4.x до 6.x - это версии Visual C++ - это я про него. А в C++ Builder c версии 6.0 Stlport поставляется как стандартная библиотека.
    С CBuilderX идет она же.
     
     
    Добавлено
    dB6

    Код:
     
      DWORD FreeBytesAvailable;  
      DWORD TotalNumberOfBytes;  
      DWORD TotalNumberOfFreeBytes;  
     
      BOOL GetDiskFreeSpaceFlag = ::GetDiskFreeSpaceEx(  
      "c:\\",  // directory name  
      (PULARGE_INTEGER)&FreeBytesAvailable,     // bytes available to caller  
      (PULARGE_INTEGER)&TotalNumberOfBytes,     // bytes on disk  
      (PULARGE_INTEGER)&TotalNumberOfFreeBytes  // free bytes on disk  
     );  
     

     
    Добавлено
    Да кстати - DWORD и ULARGE_INTEGER - суть разные вещи, посмотри их определение. Т.е. как написано работать не будет - замени DWORD на ULARGE_INTEGER

    Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 01:58 22-08-2004 | Исправлено: vndovr, 02:16 22-08-2004
    dB6



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vndovr
    Каюсь, с типом перепутал, это я просто разный код пробовал. Но суть не в том, DWORD или ULARGE_INTEGER, главное - это ошибка E2015, а она возникает и так и так.
    Даже если
    Код:
     
    ULARGE_INTEGER fb, tb, tfb;
    GetDiskFreeSpaceEx("C:\\", &fb, &tb, &tfb);
     

    Так что дело не в том, насчет переменных - я все понимаю, меня интересует именно эта ошибка.

    Всего записей: 408 | Зарегистр. 09-02-2003 | Отправлено: 10:39 22-08-2004
    Karlsberg



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dB6
    Предупреждаю - с Дельфи не работал, но на C/C++ сделал бы так:
     
    GetDiskFreeSpaceEx("C:\\", (PULARGE_INTEGER)&fb, (PULARGE_INTEGER)&tb, (PULARGE_INTEGER)&tfb);
     
    типа, кастинг для компилятора - он понимает параметры как _ULARGE_INTEGER*, а функция хочет тип PULARGE_INTEGER. Успехов!

    Всего записей: 1008 | Зарегистр. 13-12-2001 | Отправлено: 13:01 22-08-2004
    vndovr

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dB6
    ??????????  
    Я же тебе показал как от нее избавится :
    Повторяю:  

    Код:
    ::GetDiskFreeSpaceEx(...)

    два двоеточия перед именем функции  - смотри код выше.  
     
    Добавлено
    Таким образом вызываешь функцию из Win32 API.  
    Если хочешь из Sysutils.hpp -  
    вызывай как Sysutils::GetDiskFreeSpaceEx - параметры там просто немного хитрее передаются.  
    Компилятор честно говорит - конфликт имен - фенкция объявлена в глобальном пространстве имен и в пространстве имен Sysutils. Посмотри на любой хедер который генерируется из паскалевских модулей - каждый unit ложится в свое пространство имен и в конце каждого стоит using namespace {имя модуля}

    Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 14:12 22-08-2004 | Исправлено: vndovr, 14:24 22-08-2004
    dB6



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vndovr
    Упс... Это я просто провтыкал двоеточия  
    Спасибо большое за помощь. Теперь все ОК и количество строчек кода увеличивается
     
     
    Добавлено
    to all
    У меня вот еще один вопрос появился. Возможно несколько ламерский. Меня интересует такая возможность, как форматированние разделов под Win из своей программы. Какими способами это можно сделать? Написать программу, которая будет на уровне железа создавать ФС, забивать нулями винт и писать сигнатуру раздела? Или это возможно вызовом функции

    Код:
     
     функция(буква_раздела, тип_фс, размер_кластера и т.д.)
     

    Это утрированный пример, я понимаю, что винт надо лочить и т.д. Просто вопрос именно в том, есть ли такие функции в API или может у кого библиотеки есть? Занимался кто-нибудь таким?

    Всего записей: 408 | Зарегистр. 09-02-2003 | Отправлено: 20:15 26-08-2004
    nobody2

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Смотри Device IO в манах

    Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 10:43 27-08-2004
    dB6



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nobody2
    Совет конечно, хороший. Я бы не спрашивал, если бы хотел получить такой ответ.

    Всего записей: 408 | Зарегистр. 09-02-2003 | Отправлено: 00:20 31-08-2004
    odl455



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dB6
     
    таких функций в апи нету. библиотек  - не видел таких. а сделать поидее можно, задача обозримая вроде

    Всего записей: 659 | Зарегистр. 26-08-2002 | Отправлено: 00:55 31-08-2004
    mihas83



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dB6
    И все-таки вопрос не по программированию на С++.
    Открыл бы отдельной темой - может бы быстрее помогли.
    А если со стороны железа и ОС - глянь сюда.  

    ----------
    Мы знаем: время растяжимо. Оно зависит от того,
    Какого рода содержимым Вы заполняете его. (C. Маршак)

    Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 07:59 31-08-2004
    dB6



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    odl455
    Сенкс, вразумительный ответ. Хотелось подтверждения своим мыслям. Хотя все-таки хотел бы найти где библиотеки, может кто и писал.
     
    mihas83

    Цитата:
    И все-таки вопрос не по программированию на С++.  

    Ну почему же? Если я хочу реализовать это в своей программе на C++, значит это относится к программированнию на C++

    Всего записей: 408 | Зарегистр. 09-02-2003 | Отправлено: 22:51 31-08-2004
    mihas83



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dB6

    Цитата:
    Ну почему же? Если я хочу реализовать это в своей программе на C++, значит это относится к программированнию на C++

    По такой теории ты знаешь сколько относится к программированнию на C++?
    Половина топиков форума ''Прикладное программирование'' можна стащить сюда.

    Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 06:57 01-09-2004
    Arion



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если говорить вкратце, ты должен получить дескриптор диска с помощью CreateFile, а затем - использовать функцию DeviceIoControl, передав туда в качестве управляющего параметра один из следующих IOCTL кодов:
     

    IOCTL_DISK_CREATE_DISK
    IOCTL_DISK_DELETE_DRIVE_LAYOUT
    IOCTL_DISK_FORMAT_TRACKS
    IOCTL_DISK_FORMAT_TRACKS_EX
    IOCTL_DISK_GET_CACHE_INFORMATION
    IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
    IOCTL_DISK_GET_DRIVE_LAYOUT_EX
    IOCTL_DISK_GET_LENGTH_INFO
    IOCTL_DISK_GET_PARTITION_INFO_EX
    IOCTL_DISK_GROW_PARTITION
    IOCTL_DISK_IS_WRITABLE
    IOCTL_DISK_PERFORMANCE
    IOCTL_DISK_PERFORMANCE_OFF
    IOCTL_DISK_REASSIGN_BLOCKS
    IOCTL_DISK_SET_CACHE_INFORMATION
    IOCTL_DISK_SET_DRIVE_LAYOUT_EX
    IOCTL_DISK_SET_PARTITION_INFO_EX
    IOCTL_DISK_UPDATE_PROPERTIES
    IOCTL_DISK_VERIFY

    Поищи в MSDN по ключевому слову Disk Management.

    ----------
    Хачу роботать каректором арфаграфии

    Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 07:28 01-09-2004
    dB6



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mihas83
    Я не хочу выпадать в оффтопик, и не хочу с Вами ругаться. Я пищу на C++, и задал вопрос, как это реализовать. А раз я задал этот вопрос в теме "Вопросы по программированию на С++ ", значит я подразумеваю, что мне нужна эта возможность для C++-проекта. Если бы мне надо было это реализовать на Pascal, я бы сюда не лез. Еще раз извиняюсь за оффтоп. И... ничего личного. Ок?
    Arion
    Сенкс, буду копать в эту сторону

    Всего записей: 408 | Зарегистр. 09-02-2003 | Отправлено: 00:03 02-09-2004
    wiwiw

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dB6
    Если бы ты задал этот вопрос в теме про Паскаль, то ответ Arion'a, которому ты сказал
     

    Цитата:
    Сенкс

     
    не отличался бы ни на символ.

    Всего записей: 127 | Зарегистр. 20-03-2004 | Отправлено: 02:09 02-09-2004
    mihas83



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wiwiw

    Цитата:
    Если бы ты задал этот вопрос в теме про Паскаль, то ответ Arion'a, которому ты сказал, не отличался бы ни на символ.  

    dB6, можешь писать где хочешь...
    Но здесь ''заглянут'' только С++-шники, а в отдельной, правильно сформулированной теме шансов услышать совет гараздо больше.  

    Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 08:13 02-09-2004
    RacOon404



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Приспичило создать кальк (вобще я по книге учусь и пишу только примеры, но еще пытаюсь тут самому придумать )
    т.е. просто вводишь первое число, знак (+,-,%,*), второе число - выводится ответ
    посидев написал вот такое  

    Код:
     
    #include "iostream"
    using namespace std;
    int pek(int, int);
    int mek(int, int);
    int uek(int, int);
    int rek(int, int);
    int main()
    {
    int a, b, c;
    char f;
    cin >> a;
    cin >> f;
    cin >> b;
    if(f='+') { c=pek(a,b); }
    if(f='-') { c=mek(a,b); }
    if(f='*') { c=uek(a,b); }
    if(f='%') { c=rek(a,b); }
    cout << c << endl;
    return 0;
    }
    int pek(int a, int b)
     {
    return a+b;
     }  
     int mek(int a, int b)
     {
    return a-b;
     }
     int uek(int a, int b)
     {
    return a*b;
     }
     int rek(int a, int b)
     {
    return a%b;
     }
     

    Вобщем работает оно не так как надо...(вернее не как я хотел )  
    Как это можно сделать, чтобы работало (ну и рациональней)  
    И как сделать чтоб можно было прям написать пример в одну строку в одном cin'е и он обработаолся и разбился на несколько переменных...
    ЗЫ писал в меру обученности так что...
     
    Добавлено
    еще я попробовал вобще без функций - тоже самое.
    но охото с функциями вобще

    Всего записей: 324 | Зарегистр. 26-11-2003 | Отправлено: 10:58 07-09-2004
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RacOon404
    бери страуструпа там описано создание простого калькулятора

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 13:27 07-09-2004
    f_serg



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RacOon404

    Цитата:
    if(f='+') { c=pek(a,b); }
    if(f='-') { c=mek(a,b); }
    if(f='*') { c=uek(a,b); }
    if(f='%') { c=rek(a,b); }

     
    Операция сравнения в C/C++ вот такая '=='. '=' - это присваивание.

    ----------
    Serg

    Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 16:53 07-09-2004
    RacOon404



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Спасибо, заработало... хотя вобще я с самого начала (еще из пхп знал) что в сравнении используется "==", но написав с "==" прога не компилировалась, писала че-то типа того что нельзя использовать == с char типом... а щас все без проблем. еще раз спасибо.

    Всего записей: 324 | Зарегистр. 26-11-2003 | Отправлено: 18:00 07-09-2004
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru