Тонкости C/C++

Тема в разделе "LANGS.C", создана пользователем Nafanya, 5 фев 2011.

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    l_inc
    Не всегда же быть серъёзным. ^) А вообще это как-бы намекает, что не надо использовать сишные интерфейсы в C++.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    как-то это грустно и одновременно устало читается... не переживайте)
     
  3. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    вас принимают за школьника когда вы уже 6 лет им не являетесь, что есть чем гордиться.

    Самое смешное что так и есть, и не надо спорить, плавали знаем.
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Booster
    Ну не для всего WinAPI есть класс-ные интерфейсы... Или если нужно использовать third-party-dll, где функция может менять объект, а может и не менять, но гарантированно не меняет для данного набора параметров, то ИМХО const_cast подходит как нельзя лучше.
    Rel
    Так и было грустно... :)
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    l_inc
    Безусловно, но это всё равно ахтунг/костыль.
     
  6. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Ребят, подскажите плиз какую команду нужно дать CL , чтобы он при компиляции исходника подрубил библиотеку?

    Вообщем скомпилил для теста библиотеку dll (из lib.h и lib.cpp). Потом пытаюсь скомпилить main.cpp, в нем деректива есть #include "lib.h". Три файла (main.cpp lib.h lib.dll) в одной папке. h-ник нормально подрубается, но компоновщик не может разрешить ссылки на функции из библиотеки. Какую команду надо дать CL,чтоб он подрубил библу?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Попробуй просто добавить ее к спсику файлов
    cl main.cpp a.cpp b.cpp lib1.lib lib2.lib
     
  8. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Я хочу сделать, чтобы был h-ник - интерфейс, а реализация функций хранилась в библиотеке в машинном коде, а не в исходном. В линухе раньше это делали спокойно,а в Винде первый раз и никак, засада! Черт знает как библиотеку подрубать.

    Пробывал cl main.cpp mybibl.dll -никак.

    Может библиотеку надо не в dll а в lib компилировать.
     
  9. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    ФУ получилось. Спасибо Great

    Оказалось вот так надо:
    1) Создание библиотеки
    cl mylib.cpp
    lib mylib.obj

    2) Компиляция проекта с подключением библиотеки
    cl main.cpp mylib.lib
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    К DLL библиотека с импортом (LIB) должна быть ещё - её подключать надо.
    То что ты написал - это статическая библиотека, а не DLL.
     
  11. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Совершенно верно. Сейчас только понял разницу между LIB(статической библиотекой) и LIB(библиотека с импортом для DLL) - вот ведь какую путаницу сделали. Собрал также динамическую библуху DLL и подрубил её к проекту(естественно все через консоль - так проще). Потренировался немного подрубать библиотеки.

    Насчет статических библиотек все понятно - идет h-ник и .lib(подрубать их не сложно).

    А вот с динамическими вопросы возникают... Они что идут в комплекте - .dll .lib(библиотека импорта) и h-ник? При отсутствии одного из этих файлов подрубить практически нереально. А в Windows dll-ок полно, а h-ников и .lib к ним что-то я не видел. Как же их подрубают? Или чужие dll не подключают к проектам.
     
  12. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    Так и есть, идут в комплекте. Т.е. юзеру дают только .dll, а разрабу - .lib и .h
    От виндовых dll-ок все lib-ы в студии лежат.
     
  13. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    krabz
    Поискал, нету. Не подскажите, где можно достать h-ники и lib-ы для системных dll? Я как понял h-ники в include копировать, а lib-ы в lib.

    Это получается, что любую функцию экспортируемую системной dll-кой, которую видит OllyDbg, при наличии h-ников и lib можно вызывать напрямую? Или нет.
     
  14. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    У меня вот здесь:
    c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\
    c:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\

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

    Совершенно верно, для того они и предназначены чтоб их дёргали.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    как же ты живешь то без "lib для системных dll"? октрою тебе маленький секрет, только не говори никому... половина посиксных функций (например malloc и free) - прослойки над WinAPI, оставшаяся половина реализованы в CRT руками (например srand и rand)...
     
  16. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    после такой фразы я бы закрыл тему, а получеловка Nafanya изолировл бы от васм.ру на недельку. на карантин. амбулаторно.
     
  17. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2010
    Сообщения:
    105
    NeuronViking
    ) C другой стороны, можно так же и вас на недельку на карантин. Остыть)
     
  18. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    NeuronViking так вы почитайте для сравнения, что в ветке пишут Rel, GRRRLPower,krabz и другие, и что пишет _DEN_.
    Тем более у него неистовое желание все время меня подколоть, если раньше не обращал на это внимание, то сейчас просто уже достало.

    Выкладываю пример создания динамической и статической библиотеки под Windows (код был взят из "Философия С++").
    Следует обратить внимание на ключевое слово __declspec(dllexport), применяющееся для экспортирования функций из dll. Для создания статической библиотеки оно не нужно.
     
  19. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    закройте уже этот флуд
     
  20. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    sergegers
    +100500

    Nafanya
    всю ветку не читал, но про const_cast - вполне осмысленно.