| 
			| 
					
						| Sands 
								Помогающий    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 
								Помогающий    Offline | 
								|  | « Ответ #2 : 11-09-2006 17:14 »  |  | 
 
 А меня то как удивило     Но сработало     Спасибо!!! |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimitry 
								Гость
 | 
								|  | « Ответ #3 : 11-09-2006 18:59 »  |  | 
 
 Всегда пожалуйста! |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Serg79 | 
								|  | « Ответ #4 : 13-09-2006 04:49 »  |  | 
 
 Можно еще и так делать: #pragma comment(lib,"*.lib")
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Hadron 
								Участник    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);
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #6 : 14-03-2010 15:17 »  |  | 
 
 Hadron, не работает или не линкуется ?   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Hadron 
								Участник    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 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #8 :  16-03-2010 16:44 »   |  | 
 
 Последние 4 ошибки исчезнут, если исправить первую. Что-то не так инклудишь. Можешь написать (DWORD) вместо (DWORD_PTR), на 32х-разрядной системе ничего не потеряешь. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Hadron 
								Участник    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 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #10 : 16-03-2010 16:59 »  |  | 
 
 Мда. Таким образом мы возвращаемся к твоему собственному вопросу-ответу №5. Действительно не линкуется Winmm.lib. Что конечно крайне странно, если ты, как было сказано, написал #pragma comment(lib, "winmm.lib") |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Hadron 
								Участник    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 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #12 : 16-03-2010 17:23 »  |  | 
 
 .сисипишника    Если серьезно, то просто нет вариантов почему не линкуется. Я бы попробовал собрать, но у меня студии нет. Если кто согласится этим заняться, то выкладывай и будем разбираться |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #13 : 16-03-2010 17:24 »  |  | 
 
 самое первое - #include "stdafx.h"
 
 поместить в самое начало файла cpp
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| resource 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #14 : 16-03-2010 17:26 »  |  | 
 
 Алексей1153++, я всегда либы в самом начале прописывал, и всегда работало. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Hadron 
								Участник    Offline | 
								|  | « Ответ #15 : 16-03-2010 17:32 »  |  | 
 
 #include "stdafx.h"#include "resource.h"
 #include <shellapi.h>
 #include <mmsystem.h>
 #pragma comment(lib, "winmm.lib")
 
 теперь пашет, спасибо!!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #16 : 16-03-2010 17:41 »  |  | 
 
 resource, это хитрая штука - предкомпиленные заголовки ) Если пз включены - то даже глобальные дефайны проекта видны только после #include "stdafx"Вот я и предположил
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| resource 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #17 : 16-03-2010 17:46 »  |  | 
 
 Не понимаю почему так происходит |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #18 : 16-03-2010 17:51 »  |  | 
 
 не поверишь, я тоже ))) Давно забил и смирился |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| resource 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #19 : 16-03-2010 18:06 »  |  | 
 
 в общем пока что это останется для меня случаем из серии"просто так надо". Ну чтож, бывают такие. Придется тоже смириться. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #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"
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #21 : 17-03-2010 05:50 »  |  | 
 
  - что и было доказано на практике ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| resource 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #22 : 17-03-2010 07:57 »  |  | 
 
 LogRus, ну это всё конечно хорошо, но понимания если честно не добавило, т.к. довольно поверхностно. Пункт 2 весьма самобытный и всё объясняет     , но это опять же "прими как есть и успокойся", объяснений не жди. Я вот тут еще понял, что я используя PCH, оказывается мало что (или вообще ничего) про них знал. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #23 : 17-03-2010 08:08 »  |  | 
 
 resource, это магия от MS (c (c (c))) ))) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| resource 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #24 : 17-03-2010 09:00 »  |  | 
 
 Алексей1153++, пожалуй это самое реальное объяснение    |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #25 : 17-03-2010 09:40 »  |  | 
 
 Это не магия, а самая обычная плата за скорость компиляции.  В MS могли бы пойти ещё дальше - автоматически (неявно) включать stdafx.h в начало каждого модуля, у которого выставлен PCH. Но этор это недостаточно наглядно, может приводить к ошибкам и не избавляет от проблемы двусмысленного положения директив препроцессора, заданных для модуля в виде опций компиляции (и соответствующей опции в свойствах модуля в дереве проекта или в глобальных директивах для всего проекта). То есть, с одной стороны, есть прекомпилируемые заголовки - то есть такие, которые компилируются до всех остальных модулей. А с другой стороны, включение этих заголовков конфликтует с тем, что у каждого модуля могут быть свои директивы препроцессора, заданные как в коде, так и напрямую в виде опций компиляции.  И программист, по идее, ожидает, что эти самые директивы будут проникать во все инклуды, как это и полагается. Но stdafx - это, разумеется, не "все инклуды", раз уж оно включает уже скомпилированный код. И, разумеется, stdafx игнорирует все дефайны.  Решение MS - лишь наименьшее зло в попытке нанести минимальный ущерб нормальной логике трансляции и наглядности происходящего при использовании прекомпилируемых заголовков. То есть, это попытка сделать удобно в ситуации, которую язык C++ изначально не предусмотрел (и в этом изъян конструкций языка). Если есть более удачные решения, как реализовать PCH - хотелось бы услышать    Думаю, MS тоже только спасибо скажет. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #26 : 17-03-2010 09:44 »  |  | 
 
 Да где уж нам уж перещеголять MS   Прочувствовали, учли. |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| resource 
								Молодой специалист    Offline 
								Пол:    | 
								|  | « Ответ #27 : 17-03-2010 10:00 »  |  | 
 
 И, разумеется, stdafx игнорирует все дефайны Дык я вот это и не понимаю. Ну и пускай он их игнорирует. Вот вопрос почему директивы игнорируются в пределах модуля c/cpp. Зачем так надо было делать. Или же они впринципе глобально игнорируемы после включения stdafx (насколько я понял, так и получается). Не понимаю о каких  попытках нанести минимальный ущерб тут можно говорить. Надо было игнорировать только в пределах stdafx и всего что в нем, а дальше опять включить все указанные программистом директивы. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #28 : 17-03-2010 11:23 »  |  | 
 
 То, что stdafx их игнорирует - уже ненормально. В этой ситуации самым естественным мне видится правило "пиши stdafx в самом начале всегда" - уже хотя бы по соображениям, что нечего что-то делать с препроцессором, прежде чем прекомпилированная часть будет включена. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |