Автор вопроса: Neco | Web-сайт:neco.pisem.net | ICQ: 247906854
Как мне объявить функцию MessageBeep (к примеру) в VC++ 6.0 без инклудов. Спрашиваю не потому что такой принципиальный и не хочу пользоваться инклудами, а потому что некоторые функции я в инклудах не могу найти (к примеру, OpenThread). И ещё потому, что хочется узнать как мне подключить к проекту библитеку без инклудов (к примеру, свою).
P.S. Динамически умею, но меня этот способ не прикалывает совсем.
Странно, я думал, что эта вот мутатень и называется "динамическим подключением библиотеки". А когда в инклудах - "статическим".
Ну так это-то я умею - почти самое первое, что сделал на С++.
>Посмотри как в инклюдах они объявлены так же и объявляй...
Я уже заглядывал и ничего не понял - где имя библиотеки?
Как я уже говорил, в tlhelp32.h не было функции OpenThread и я решил засунуть туда её вручную (срисовать с какой-нибудь рабочей) и дык ни фига не вышло.
Ни хрена не понимаю чего что означает - просто скопировал.
Не работает.
Нашёл ссылку на Sleep в winbase.h, закомментировал там, а при команде FindDeclaration Sleep один фиг находится в winbase.h, хотя самодельный инклуд с вышеупомянутым кодом подключён и по идее должен работать.
Что делать? Как вы сами (я имею ввиду людей программирующих на С++) вызываете функции из своих библиотек? Неужели через LoadLibrary?
P.S. Как всегда в конце вопроса про С++ прошу:
Подкиньте кто-нить ссылку на сайт хелпа по С++, где говорят на Нормальном (а не заумном) русском языке, пожалуйста! Неужели всем сишникам уже столько лет, что они не могут нормальных хелпов писать? Типа таких, на которых я VB учился - в лёгкой непринуждённой форме (обходя места, которые ввиду своей заумности стоят на пути создания проги) объяняют как писать проги - не куски кодов, с которыми непонятно, что делать и которые куда ни суёшь нигде не компилируются, а ПРОГИ с подробным объяснением каждого действия.
Ну или станьте кто-нить моим учителем на время... 8(
Задолбался я уже не знать С++. Скока раз уже сажусь плотно за него - сдвиги есть, но единой картины не получается.
Чё, товарищ по несчастью?
Меня угораздило тоже закачать Visual C++ 2003 Toolkit. До этого смотрел за си-каракули со стороны и думал: "Какой же он мерзкий, этот Си!"
А теперь попробовал, и думаю: "Нет, это не мерзкий, это супербогомерзкий ублюдочный язык ц".
Всеми ругаемый Дельфи - да просто сказка, чудо, шедевр в сравнении с этим ц.
Neco, ты хоть какие ссылки на простейшие примеры знаешь? А то полдня сидел в Ослонете - ни одного(!) примера, который создаёт примитивное окошко не нашёл Исключительно консоли. Или в ц невозможно создавать окна, только консольные приложения?
Ни хрена не понимаю чего что означает - просто скопировал
Если просто скопипейстить декларацию из MSDN, не работает? А что выдает, мб, ты соответствующий .lib не подключил?
Как вы сами (я имею ввиду людей программирующих на С++) вызываете функции из своих библиотек?
Пока как-то получалось...
Неужели всем сишникам уже столько лет, что они не могут нормальных хелпов писать?
Сишники, как и линуксоиды, снобы, они не опустятся до того, чтобы писать "уроки для маленьких"
А теперь попробовал, и думаю: "Нет, это не мерзкий, это супербогомерзкий ублюдочный язык ц"
Гы, наверно, все, кто решают ботать Си проходят через это
А то полдня сидел в Ослонете - ни одного(!) примера, который создаёт примитивное окошко не нашёл Исключительно консоли. Или в ц невозможно создавать окна, только консольные приложения?
Ну вот, единственный, почти рабочий пример ) Ура! Правда пришлось вставить
#pragma comment(lib, "user32.lib"
#pragma comment(lib, "kernel32.lib"
но это ерунда.
Я его теперь за шаблон буду использовать! И назову "Sharp.tpl"
>>Как вы сами (я имею ввиду людей программирующих на С++) вызываете функции из своих библиотек?
>Пока как-то получалось...
Ну и как?
>Сишники, как и линуксоиды, снобы, они не опустятся до того, чтобы писать "уроки для маленьких"
А сам как же? 8)
>А что выдает, мб, ты соответствующий .lib не подключил?
Выдаёт классическое - "функция не определена".
И кто такой "соответствующий .lib"?
Там что - для каждой функции ещё что-то подключать надо?
>А то полдня сидел в Ослонете - ни одного(!) примера, который создаёт примитивное окошко не нашёл
А я окошко сам наваял - долго е...ся, но наваял. Пока делал, кстати, пару открытий совершил, которые потом в своей vb'шной проге использовал.
>Вот тут есть все инклюды, либы, хидеры, вся psdk.
Кроме инклудов - всё непонятно. Что есть что - точнее на фига оно "есть".
Короче, объясни, если не трудно, что для чего и как используется.
Типа как "инклуд - код, который должен повторяться во всех стандартных прогах и следовательно его можно выделить в отдельный файл и не изменять. Надпись #include <файл> раноценна тому, что ты копируешь весь код <файла> на место этой строки." - это то, как я понимаю инклуды. А как ты понимаешь всё остальное (либы, хидеры, psdk)?
Окошко делать - не проблема, проблема - синтаксис, где какую корягу вставить типа фигурной скобки, точки с запятой и т.п. И больше всего добивают эти типы : HRESULT HWND HPEN и прочая гадость. По сути все - 4 байтные величины. Но если написано HDC, то HBRUSH в него не запихнешь даже бульдозером. И то и другое - 4 байта, dword.
PSDK - Platform SDK, пакет необходимого для разработки приложений (всякие тулзы и файлы, которые используют компилятор и линкер для работы)
Хидеры и инклюды - файлы, где описываются ф-ции их параметры
WINUSERAPI
BOOL
WINAPI
SetMenuItemInfoA(
IN HMENU,
IN UINT,
IN BOOL,
IN LPCMENUITEMINFOA
либы - те же dll, но статические.
#include <файл> ничего никуда не копирует, просто указание для компилера, в каких файлах искать незнакомые имена ф-ций, структур и т.д.
#pragma comment(lib, "gdi32.lib" - указание, где брать либу, чтобы прилинковать её. Причем если одна ф-ция используется из либы - вся либа целиком не будет цепляться к файлу. Только одна ф-ция. И ничего более. В отличие от dll, lib не нужно таскать с собой и ложить рядом с приложением. Необходимые куски кода из lib вделываются в твой ехе-шник. В отличие от dll, используя из которой всего одну ф-цию, потащишь за собой все.
На асме это примерно так, думаю си не отличается принципиально На сях только второй день, всего одно окно да пару dll сделал.
>Сишники, как и линуксоиды, снобы, они не опустятся до того, чтобы писать "уроки для маленьких"
А сам как же? 8)
А я исключение, мне просто лень
>А что выдает, мб, ты соответствующий .lib не подключил?
Выдаёт классическое - "функция не определена".
И кто такой "соответствующий .lib"?
Там что - для каждой функции ещё что-то подключать надо?
Если ты используешь какую-нибудь функцию из какой-нибудь DLL, у тебя есть 2 пути: 1) LoadLibrary-GetProcAddress; 2) Подключить хедер, соответствующий твой DLL и указать линкеру на lib-файл, соотвестствующий этой DLL. Lib-файл хранит "стуб" между твоей программой и DLL, нечто вроде того, что потом помещается в таблице импорта.
Инклюды и хедеры - это примерно одно и то же, но хедеры используются только для объявления функций, которые вызываются через либы, а в инклюдах часто идет полезный код.
проблема - синтаксис, где какую корягу вставить типа фигурной скобки, точки с запятой
Ну это, знаешь, базовый синтаксис, без его знания не стоит идти дальше.
И больше всего добивают эти типы : HRESULT HWND HPEN и прочая гадость. По сути все - 4 байтные величины. Но если написано HDC, то HBRUSH в него не запихнешь даже бульдозером. И то и другое - 4 байта, dword.
Меня тоже сначало бесило, после ассемблера-то А потом вдуплил. Если ты получаешь от CreateWindowEx HWND, а потом вдруг решишь на нем порисовать, как на HDC, компилятор тебе скажет - ты не прав, рисуют на HDC, а не на HWND, и ошибка будет тут же исправлена, а в случае ассемблера в более-менее большом исходнике, на отлов ошибки придется потратить порядочно времени. Тем более, что никакого бульдозера не надо, достаточно явного приведения типа, например HDC hDC = (HDC)hWnd;
#include <файл> ничего никуда не копирует, просто указание для компилера, в каких файлах искать незнакомые имена ф-ций, структур и т.д.
Нет, он как раз таки копирует, только делает это не компилятор, а препроцессор.
В отличие от dll, используя из которой всего одну ф-цию, потащишь за собой все.
Ну это из-за того, что собственно полезного кода в libах нету.
Разве это не красота? Правда, я еще не проверял, скомпилируется ли это или нет
Или классический пример:
c=0;
++c+++=++c++;
Чему будет равно c?
Или совершенно потрясающий исходник, который я недавно заценял: