Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение lib-файлов  (Прочитано 38740 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
Sands
Помогающий

ua
Offline Offline

« : 11-09-2006 16:52 » 

Доброго всем времени суток.
Столкнулся с проблемой подключения lib-файла в проекте который пишется под Visual Studio .Net 2003. Может кто знает где запрятана ета опция? Буду очень благодарен.
Заранее спасибо всем.
Записан
Dimitry
Гость
« Ответ #1 : 11-09-2006 17:06 » 

Насколько помню, подключаемые *.lib файлы нужно перечислить в списке "Additionel dependencies" на вкладке параметров Linker'а. Меня в своё время это очень удивило...
« Последнее редактирование: 17-12-2007 05:06 от Алексей1153++ » Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #2 : 11-09-2006 17:14 » 

А меня то как удивило  С ума сойти... Но сработало  Да-да Спасибо!!!
Записан
Dimitry
Гость
« Ответ #3 : 11-09-2006 18:59 » 

Всегда пожалуйста!
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 13-09-2006 04:49 » 

Можно еще и так делать:
Код:
#pragma comment(lib,"*.lib")
Записан
Hadron
Участник

ru
Offline Offline

« Ответ #5 : 14-03-2010 15:15 » 

Можно еще и так делать:
Код:

#pragma comment(lib,"*.lib")
С этим все понятно но вопрос почему при подключении

#pragma comment(lib, "winmm.lib")
неработает функция

 mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE,(DWORD_PTR) &OpenParm);
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 14-03-2010 15:17 » 

Hadron, не работает или не линкуется ? Улыбаюсь
Записан

Hadron
Участник

ru
Offline Offline

« Ответ #7 : 16-03-2010 16:37 » 

Код из книги Фленова , который должен открыть лоток для дисков                                       
MCI_OPEN_PARMS OpenParm;
               MCI_SET_PARMS SetParm;
               MCIDEVICEID dID;
                     

                     
                     OpenParm.lpstrDeviceType = "CDAudio";
          mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE,(DWORD_PTR) &OpenParm);
         dID = OpenParm.wDeviceID;
                    mciSendCommand(dID, MCI_SET, MCI_SET_DOOR_OPEN, (DWORD_PTR) &SetParm);
         mciSendCommand(dID, MCI_SET, MCI_SET_DOOR_CLOSED, (DWORD_PTR) &SetParm);
          mciSendCommand(dID, MCI_CLOSE, MCI_NOTIFY, (DWORD_PTR) &SetParm);

но появляется ошибка при компиляции

:\Program Files\Microsoft Visual Studio\MyProjects\Flenov5P\Flenov5P.cpp(186) : error C2065: 'DWORD_PTR' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\Flenov5P\Flenov5P.cpp(186) : error C2677: binary '&' : no global operator defined which takes type 'struct tagMCI_OPEN_PARMSA' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\MyProjects\Flenov5P\Flenov5P.cpp(188) : error C2677: binary '&' : no global operator defined which takes type 'struct tagMCI_SET_PARMS' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\MyProjects\Flenov5P\Flenov5P.cpp(189) : error C2677: binary '&' : no global operator defined which takes type 'struct tagMCI_SET_PARMS' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\MyProjects\Flenov5P\Flenov5P.cpp(190) : error C2677: binary '&' : no global operator defined which takes type 'struct tagMCI_SET_PARMS' (or there is no acceptable conversion)
Error executing cl.exe.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 16-03-2010 16:44 » 

Последние 4 ошибки исчезнут, если исправить первую. Что-то не так инклудишь. Можешь написать (DWORD) вместо (DWORD_PTR), на 32х-разрядной системе ничего не потеряешь.
Записан
Hadron
Участник

ru
Offline Offline

« Ответ #9 : 16-03-2010 16:53 » 

В этом случае появляется сообщение о фатальной ошибке.

Flenov5P.obj : error LNK2001: unresolved external symbol __imp__mciSendCommandA@16
Debug/Flenov5P.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 16-03-2010 16:59 » 

Мда. Таким образом мы возвращаемся к твоему собственному вопросу-ответу №5. Действительно не линкуется Winmm.lib. Что конечно крайне странно, если ты, как было сказано, написал #pragma comment(lib, "winmm.lib")
Записан
Hadron
Участник

ru
Offline Offline

« Ответ #11 : 16-03-2010 17:19 » 

// Flenov5P.cpp : Defines the entry point for the application.
//

#pragma comment(lib, "winmm.lib")
#include "stdafx.h"
#include "resource.h"
#include <shellapi.h>
#include <mmsystem.h>
код был написан в самом начале .сисипишника
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 16-03-2010 17:23 » 

.сисипишника  Жжешь

Если серьезно, то просто нет вариантов почему не линкуется. Я бы попробовал собрать, но у меня студии нет. Если кто согласится этим заняться, то выкладывай и будем разбираться
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 16-03-2010 17:24 » 

самое первое -
#include "stdafx.h"

поместить в самое начало файла cpp
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 16-03-2010 17:26 » 

Алексей1153++, я всегда либы в самом начале прописывал, и всегда работало.
Записан
Hadron
Участник

ru
Offline Offline

« Ответ #15 : 16-03-2010 17:32 » 

#include "stdafx.h"
#include "resource.h"
#include <shellapi.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

теперь пашет, спасибо!!
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 16-03-2010 17:41 » 

resource, это хитрая штука - предкомпиленные заголовки ) Если пз включены - то даже глобальные дефайны проекта видны только после #include "stdafx"
Вот я и предположил
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 16-03-2010 17:46 » 

Не понимаю почему так происходит
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 16-03-2010 17:51 » 

не поверишь, я тоже ))) Давно забил и смирился
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 16-03-2010 18:06 » 

в общем пока что это останется для меня случаем из серии"просто так надо". Ну чтож, бывают такие. Придется тоже смириться.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #20 : 17-03-2010 05:12 » 

могу вам предложить в качестве ответа такую цепочку:
1. stdafx.h уже скоппилирован
2. любая директива препроцессора перед #include "stdafx.h" потенциально может изменить результат включения #include "stdafx.h", т.е. результат компиляции stdafx.h может отличается от результат включения #include "stdafx.h" при отсутствии PCH
3. как следствие пункта 2, все директивы препроцессора перед #include "stdafx.h" вредны и опасны при использовании PCH
4. как следствие пункта 3, игнорируем всё, что перед #include "stdafx.h"
Записан

Странно всё это....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 17-03-2010 05:50 » 

 - что и было доказано на практике )
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 17-03-2010 07:57 » new

LogRus, ну это всё конечно хорошо, но понимания если честно не добавило, т.к. довольно поверхностно. Пункт 2 весьма самобытный и всё объясняет  Улыбаюсь , но это опять же "прими как есть и успокойся", объяснений не жди. Я вот тут еще понял, что я используя PCH, оказывается мало что (или вообще ничего) про них знал.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 17-03-2010 08:08 » 

resource, это магия от MS (c (c (c))) )))
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 17-03-2010 09:00 » 

Алексей1153++, пожалуй это самое реальное объяснение  Улыбаюсь
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 17-03-2010 09:40 » 

Это не магия, а самая обычная плата за скорость компиляции.

В MS могли бы пойти ещё дальше - автоматически (неявно) включать stdafx.h в начало каждого модуля, у которого выставлен PCH. Но этор это недостаточно наглядно, может приводить к ошибкам и не избавляет от проблемы двусмысленного положения директив препроцессора, заданных для модуля в виде опций компиляции (и соответствующей опции в свойствах модуля в дереве проекта или в глобальных директивах для всего проекта).

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

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

Решение MS - лишь наименьшее зло в попытке нанести минимальный ущерб нормальной логике трансляции и наглядности происходящего при использовании прекомпилируемых заголовков. То есть, это попытка сделать удобно в ситуации, которую язык C++ изначально не предусмотрел (и в этом изъян конструкций языка).

Если есть более удачные решения, как реализовать PCH - хотелось бы услышать Улыбаюсь Думаю, MS тоже только спасибо скажет.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #26 : 17-03-2010 09:44 » 

Да где уж нам уж перещеголять MS Улыбаюсь
Прочувствовали, учли.
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #27 : 17-03-2010 10:00 » 

Цитата: Вад
И, разумеется, stdafx игнорирует все дефайны
Дык я вот это и не понимаю. Ну и пускай он их игнорирует. Вот вопрос почему директивы игнорируются в пределах модуля c/cpp. Зачем так надо было делать. Или же они впринципе глобально игнорируемы после включения stdafx (насколько я понял, так и получается). Не понимаю о каких  попытках нанести минимальный ущерб тут можно говорить. Надо было игнорировать только в пределах stdafx и всего что в нем, а дальше опять включить все указанные программистом директивы.
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 17-03-2010 11:23 » 

То, что stdafx их игнорирует - уже ненормально. В этой ситуации самым естественным мне видится правило "пиши stdafx в самом начале всегда" - уже хотя бы по соображениям, что нечего что-то делать с препроцессором, прежде чем прекомпилированная часть будет включена.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines