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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Все это очень зыбкая тема для прений. Например, можно ли запустить тот же gcc/g++, портированный из линукса, без наличия MSYS/MinGW? Вряд ли. То есть, оболочка все же нужна. То же самое относится и к sh, и еще некоторым утилитам. Ну, и плюс ко всему, MinGW/MSYS объединяет все эти утилиты и подчиняет единой структуре, создавая необходимое дерево каталогов, прописывая необходимые пути в переменные окружения, создавая переменные окружения, специфичные для unix-систем, ну и т.д. То есть, ее все таки можно назвать оболочкой.

    Цитата:
    А в следующей фразе утверждается обратное:

    Обратное я не утверждаю. Я лишь утверждаю, что программы, скомпилированные в самой оболочке MSYS/MinGW с использованием gcc, для своей работы этой оболочки не требуют (но сам-то gcc и смежные с ним утилиты без ее наличия не работают, иначе зачем нужно было создавать всю эту обололочку, если проще было просто портировать gcc со всеми дополнительными утилитами ). А вот cygwin - это уже не оболочка, а самый натуральный эмулятор.
    Ну и последний аргумент: что такое Visual Studio? Это по сути тоже оболочка (или среда) программирования. Она так же состоит из массы взаимосвязанных библиотек и утилит (IDE, утилиты для компиляции из командной строки, и т. д.). Причем, отдельно взятая утилита ничего толкового из себя не представляет, и работает только в оболочке, вкупе  со всеми остальными. И также, как и в MinGW,  создаваемые ей программы для своего запуска наличия этой оболочки не требуют.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 03:02 10-09-2006
    Abs62



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

    Цитата:
    Все это очень зыбкая тема для прений.

    Не договорившись о смысле применяемых терминов, достигнуть взаимопонимания крайне сложно.

    Цитата:
    Например, можно ли запустить тот же gcc/g++, портированный из линукса, без наличия MSYS/MinGW?

    А что в таком случае именуется MinGW?

    Цитата:
    Ну, и плюс ко всему, MinGW/MSYS объединяет все эти утилиты и подчиняет единой структуре, создавая необходимое дерево каталогов, прописывая необходимые пути в переменные окружения, создавая переменные окружения, специфичные для unix-систем, ну и т.д.

    Программа, проделывающая описанные действия, именуется не "оболочка", а "инсталлятор".

    Цитата:
    иначе зачем нужно было создавать всю эту обололочку, если проще было просто портировать gcc со всеми дополнительными утилитами
     
    Именно это и проделали разработчики MinGW, в отличие от разработчиков cygwin.

    Цитата:
    Ну и последний аргумент: что такое Visual Studio? Это по сути тоже оболочка (или среда) программирования.
     
    VS включает в себя компилятор, библиотеки, хидеры, утилиты и оболочку (среду) - IDE. MinGW включает в себя компилятор, библиотеки, хидеры, утилиты, но оболочка (среда) в нём отсутствует. Вот уже упомянутый Dev-C++ - это как раз и есть оболочка (среда). О чём прямо говорят разработчики - "Dev-C++ is a full-featured Integrated Development Environment (IDE) for the C/C++ programming language. It uses Mingw port of GCC (GNU Compiler Collection) as it's compiler".

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

    Отнюдь. Требование наличия определённых DLL и/или переменных окружения не есть признак оболочки - иначе оболочкой следовало бы называть едва ли не любую программу.

    Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 05:16 10-09-2006
    b3nd3rster

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    xdude, за книгу спасибо. У меня только один вопрос, ты ведь эту книгу изучал уже. У меня в книге описывается C++ до 1993/1994 года. То есть там только про предварительный стандарт ANSI/ISO августа 1994. А до какого года (стандарта) описывается во втором издании.

    Всего записей: 610 | Зарегистр. 18-08-2006 | Отправлено: 20:29 10-09-2006
    xdude



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

    Цитата:
     
    MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party C runtime DLLs.
     
    MSYS: A Minimal SYStem to provide POSIX/Bourne configure scripts the ability to execute and create a Makefile used by make.
     

    Перевод, надеюсь, не требуется?
    MSYS/MinGW - это та же среда, или оболочка, как угодно, только не включающая в себя редактор кода. Это те же самые утилиты, что и в Visual Studio - компиляция, сборка, архивирование (.lib, или .a - это не что иное, как архив .o). Плюс к этому, для этой среды можно скачать кучу других утилит, например, automake, autoconf, и т.д. Вот если взять отдельную такую программу (например, порт automake под Windows, или порт gcc под windows) - это будет порт, а если объединить массу таких программ вместе, плюс линуксовую оболочку sh или bash - то это никак нельзя назвать портом, это уже среда разработки, оболочка, включающая в себя массу различных утилит для достижения поставленной цели.

    Цитата:
    Программа, проделывающая описанные действия, именуется не "оболочка", а "инсталлятор".  

    Мдаа... Cygwin - это тоже инсталлятор? Он ведь тоже при запуске создает окружение, в которое прописывает переменные, в нем тоже все подчинено единой структуре, типичной для линукса?
    Кстати, MSYS вполне можно назвать эмулятором, так как если попытаться из-под sh или bash набрать команду cd /;ls - можно увидеть, что типичная для windows раскладка файлов и папок пропала, как и диски C: D: и т.д. Вместо этого MSYS эмулирует линоксовый расклад каталогов, с папками /usr /bin /var и т.д. И многие портированные утилиты именно поэтому без самой оболочки MSYS не работают.
     

    Цитата:
    Отнюдь. Требование наличия определённых DLL и/или переменных окружения не есть признак оболочки - иначе оболочкой следовало бы называть едва ли не любую программу.  

    В принципе, достаточно обширный программный комплекс можно назвать средой (или оболочкой). Например, тот же Microsoft Office вполне назвать средой создания и обработки офисной документации. В то время как каждая отдельно взятая парограмма (например MS Word) - это всего лишь программа.
     
    В общем, советую зайти на страницу загрузки http://www.mingw.org/download.shtml, там можно увидеть, что gcc, MinGW и MSYS качаются отдельно, как и другие программы и программные пакеты для этой среды разработки. Еще можно почитать мануалы, где пишется, что для работы с gcc под виндой вам понадобится установить набор MinGW/MSYS.
     
    В общем, считаю, что нет смысла продолжать эти прения, потому что они скоро перевалят (если уже не перевалили) за тематическую грань данного топика.
     
     
    b3nd3rster
    Дело в том, что я не изучал эту книгу полностью, только некоторые необходимые мне отрывки, поэтому об описываемых там стандартах сказать ничего не могу. Но почитать советую, потому что мне ее рекомендовали как лучшую в своей области, да и мне самому понравилось, как там все описывается.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 00:38 11-09-2006 | Исправлено: xdude, 00:38 11-09-2006
    Abs62



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

    Цитата:
    В общем, советую зайти на страницу загрузки http://www.mingw.org/download.shtml, там можно увидеть, что gcc, MinGW и MSYS качаются отдельно, как и другие программы и программные пакеты для этой среды разработки. Еще можно почитать мануалы, где пишется, что для работы с gcc под виндой вам понадобится установить набор MinGW/MSYS.

    Для любителей UNIX-like систем - MinGW/MSYS. Для привычных к Windows - Dev-C++/MinGW, и не надо MSYS. Компилятор один, оболочки разные.

    Цитата:
    В общем, считаю, что нет смысла продолжать эти прения, потому что они скоро перевалят (если уже не перевалили) за тематическую грань данного топика.

    Согласен. Не будем тут holy war устраивать.

    Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 01:54 11-09-2006
    xdude



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

    Цитата:
    Согласен. Не будем тут holy war устраивать.

    Да уж И так полторы страницы уже нафлудили
     
    Вместо этого у меня вопрос по теме (или не совсем): как можно максимально урезать размер компилируемой DLL (под VS2006)? Я уже поотключал стандартные библиотеки, линкую только с самыми необходимыми (типа user32.lib и kernel32.lib), стандартной Сишной библиотекой не пользуюсь, STL тоже, короче, ограничиваю себя, как могу. Может, есть еще какие-то способы? Какие-то дополнительные настройки при компиляции/сборке? Или какие-то сторонние утилиты, типа как для exe-шников всякие упаковщики?

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 02:11 11-09-2006
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    xdude
    Ну, можно попробовать уменьшить выравнивание файловых секций (опция линкера /ALIGN), свести несколько секций в одну (/MERGE), подключить уменьшенную DOS-заглушку (/STUB), вообще отказаться от run-time library. Вот здесь есть несколько рекомендаций по этому поводу.

    Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 08:37 11-09-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Спасибо, буду экспериментировать




    подобное в ПМ

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 22:13 11-09-2006 | Исправлено: ShIvADeSt, 10:07 12-09-2006
    Elf23

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если есть кто живой отзовись!!

    Всего записей: 23 | Зарегистр. 23-08-2006 | Отправлено: 11:26 14-09-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи, кто-нибудь работал с потоками в WinAPI? У меня такая проблема:
    Создаю удаленный поток CreateRemoteThread который вызывает функцию LoadLibrary в процессе назначения. Туда параметром передаю путь к библиотеке. В самой библиотеке в функции DllMain при dwReason==DLL_PROCESS_ATTACH создаю поток hThread=CreateThread, в качестве входной использую функцию X, после чего вызываю WaitForSingleObject(hThread,INFINITE) и все зависает. Если поставить таймаут не INFINITE, а, скажем, 5 секунд, то через 5 секунд WaitForSingleObject возвращает значение WAIT_TIMEOUT. Но все дело в том, что после этого функция X все-таки выполняется, причем уже тогда, когда я начинаю деинициализацию, закрытие HANDLE-ов, освобождение памяти и т.д. Пытался перед вызовом WaitForSingleObjerct вставить Sleep(10000) - результата 0, функция X даже не начинает свое выполнение. У меня в самом начале функции идет запись в лог-файл, и эта запись там появляется только после того как я уже начинаю деинициализацию. Насколько я понял, после завершения remote thread. Может, нельзя так делать, чтобы один поток ждал завершения другого потока, в то время как его самого ждет еще и третий поток?  Или, может, нужно закрывать какие-то хэндлы, или соблюдать какую-то последовательность, или вызывать какие-то дополнительные функции, или что-то еще?
    Заранее спасибо.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 21:20 16-09-2006
    Abs62



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

    Цитата:
    В самой библиотеке в функции DllMain при dwReason==DLL_PROCESS_ATTACH создаю поток hThread=CreateThread, в качестве входной использую функцию X, после чего вызываю WaitForSingleObject(hThread,INFINITE) и все зависает.
     
    Не зависает, а ждёт завершения инициализации DLL. И запускается только после того, как DLLMain завершится. Вот что по этому поводу написано в MSDN:

    Цитата:
    The ExitProcess, ExitThread, CreateThread, CreateRemoteThread functions, and a process that is starting (as the result of a CreateProcess call) are serialized between each other within a process. Only one of these events can happen in an address space at a time. This means the following restrictions hold:
    - During process startup and DLL initialization routines, new threads can be created, but they do not begin execution until DLL initialization is done for the process.  
    - Only one thread in a process can be in a DLL initialization or detach routine at a time.  
    - ExitProcess does not return until no threads are in their DLL initialization or detach routines.

    Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 23:33 16-09-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Во! Спасибо за толковое разъяснение. А то я уже мозги сломал на этом деле
    Тогда вопрос немного из другой области: в интернете я нашел небольшой исходник в интернете, который решает мою задачу немного по-другому. Смысл в том, что там используется ресурс, который является файлом DLL. Для получения указателя на этот ресурс используются функции LoadResource и LockResource. А есть ли способ не используя ресурсы получить указатель на уже загруженный в память экземпляр библиотеки? Например, используя GetModuleHandle я могу получить хэндл моей библиотеки, но вот что делать с ним дальше? Или так сделать вообще нельзя?

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 23:48 16-09-2006
    Abs62



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

    Цитата:
    Например, используя GetModuleHandle я могу получить хэндл моей библиотеки, но вот что делать с ним дальше?
     
    Зависит от того, что от этой библиотеки требуется.
    Если ресурсы - доставать их уже упомянутыми LoadResource и LockResource. Если функции - указатель на них можно получить через GetProcAddress.
     
    PS. Такие вопросы лучше задавать не здесь, а в теме по WinAPI.

    Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 02:14 17-09-2006
    Larry



    Moderator
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Я только недавно начал программировать на С++, поэтому многого еще не знаю.
     
    Подскажите, пожалуйста, как можно функции fopen передать составное имя файла? Например: fopen_s(&file1 , file_name, "w")), где имя файла берется из argv[1] и к нему добавляется расширение 'txt'. Никак не могу сообразить, как это все передать программе.
     
    Заранее благодарен за ответ...

    ----------
    Never put off till tomorrow what can be put off till day after tomorrow just as well

    Всего записей: 3118 | Зарегистр. 20-07-2005 | Отправлено: 10:21 19-09-2006 | Исправлено: Larry, 10:22 19-09-2006
    RedPromo



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

    Цитата:
     
        if (argc<2)     {
            cout<<"Program Test3"<<endl;
            cout<<"Comand line: test3 [file name]"<<endl;
            getchar();
            return 0;}
        
        FILE *stream; //Поток открыторго файла
        char* _fname;  //Комбинированое имя файла
        int sizeNew = sizeof(argv[1])+5;  
     
        _fname = new char[sizeNew]; //Новый размер переменной имени файла
     
        sprintf(_fname,"%s.%s",argv[1],"txt"); //Вот и коббинируем то что нам нужно
        errno_t err = fopen_s(&stream,_fname,"w");
        //тут чтото делаем с тем что нам нужно
     
        _fcloseall();
        return 0;
     


    Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 12:19 19-09-2006
    Larry



    Moderator
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    RedPromo, спасибо, буду пробовать.


    ----------
    Never put off till tomorrow what can be put off till day after tomorrow just as well

    Всего записей: 3118 | Зарегистр. 20-07-2005 | Отправлено: 14:40 19-09-2006
    distance

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

    Код:
     
    #include <strsafe.h>
    #include <tchar.h>
     
    TCHAR szBuf[MAX_PATH];
    StringCchPrintf(szBuf, MAX_PATH, _T("%s.%s"),  file_name, argv[1]);
    _tfopen_s(&file1, szBuf, _T("w"));
     

    Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 15:46 19-09-2006
    Elf23

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если есть кто отзовись!!

    Всего записей: 23 | Зарегистр. 23-08-2006 | Отправлено: 16:35 19-09-2006
    xdude



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

    Цитата:
    Если есть кто отзовись!!

     
    Это что за прикол? Количество постов нагоняешь, или как?
    Странно, за то, что я "спасибо" ответил - мне предупреждение, а на подобные бессмысленные посты - ноль внимания
     
    Добавлено:
    Блин, аж забыл, зачем в форум полез
    distance

    Цитата:
    и лучше сразу приучай себя к tchar

    А зачем этот TCHAR нужен? Что он делает? Почему он лучше wchar_t или просто char?

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 18:00 19-09-2006
    Larry



    Moderator
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Еще один вопрос. Ситуация следующая:
     
    Есть хидер, в котором определена структура:

    Цитата:
    typedef struct S_xxxx {
    int param1;
    ...
    }

     
    Мне нужно  теле программы вызвать функцию, которой в качестве параметра передается данная структура.
     
    Я делаю так:

    Цитата:
    int main(int argc, char* argv[])
    {
    xxxx *ns_buf;
     
    ns_buf->param1 = 0; // присваиваю определенные значения параметрам...
    unsigned SetCommand(xxxx *);
    }

     
    Но что-то не катит. По-моему под ns_buf нужно сначала выделить память, но как это сделать, до меня не доходит.
     
    Помогите, пожалуйста...

    ----------
    Never put off till tomorrow what can be put off till day after tomorrow just as well

    Всего записей: 3118 | Зарегистр. 20-07-2005 | Отправлено: 18:14 19-09-2006
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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