Привет, пытаюсь использовать функцию из ndis.h NdisInitializeEvent В настройках линкера путь к ndis.lib прописан верно. Собираю в VS 2005 ver. 8.0 Без указания этой функции все комплиться и линкуется нормально, кто-нибудь может подсказать или возможно понять причину через взлом линковщика(так будет по-моему быстрее всего, чем читать туеву хучу мануалов?) выдает такую ошибку: Error 3 error LNK2019: unresolved external symbol "__declspec(dllimport) void __stdcall NdisRegisterProtocol(int *,void * *,struct _NDIS40_PROTOCOL_CHARACTERISTICS *,unsigned int)" (__imp_?NdisRegisterProtocol@@YGXPAHPAPAXPAU_NDIS40_PROTOCOL_CHARACTERISTICS@@I@Z) referenced in function "long __stdcall DriverEntry(struct _DRIVER_OBJECT *,struct _UNICODE_STRING *)" (?DriverEntry@@YGJPAU_DRIVER_OBJECT@@PAU_UNICODE_STRING@@@Z) driver_template.obj
вырезаем гланды через ж... unresolved external symbol - самая распространенная ошибка., и решение её лежит на поверхности (в гугле например)
Теоретически мой друг, теория и практика одно и тоже, практически - нет. Ясно и ежу, что проблема в том, что линкер не видит библиотеку ndis.lib. Вопрос в том, чей это косяк. И в чем заключается косяк.
чтобы поломать линковщик, придется залезть слишком глубоко в предмет как линковщик линкует символы в .lib, хотя возможно если это дело разрулить один раз, то решать подобные проблемы и кучу других будет плевым делом, вам так не кажется?
Вот та же хрень у другого была, решил через компиляцию посредством утилиты build. Можно и так но охота через студию, так удобнее http://www.wasm.ru/forum/viewtopic.php?id=17070
вот еще пример у человека та же проблема, советуют тоже через build, отсюда вывод, косячит студия? http://www.techtalkz.com/microsoft-device-drivers/297137-ndis-lib-linking-problems.html
делай через билд, тему ты уже нашёл, как делать. Если соберется нормально, то дальше ковырять настройки студии. Если не соберется после этого в студии - разбираться с путями и файлами проектов в студии. А взламывать совсем не обязательно.
придется к студии прикрутить батник, который будет собирать проект через ж... я имел ввиду через build конечно. Подменить кнопку студии build что-ли?
Между прочим, под дебаггером devenv.exe показал, что вызывает линкер и кидает ему файл с настройками /LIBPATH: правильным. Более того монитор файлов, тоже показал, что успешно читается ndis.lib. Вот такая хрень. Работаю теперь под студией, а компилю билдом. Смешно. Но в студии все же удобно, чтобы не говорили...
У Вас проблема в том, что собираете код как C++ и имя функции искажается до NdisRegisterProtocol@@YGXPAHPAPAXPAU_NDIS40_PROTOCOL_CHARACTERISTICS@@I@Z Надо собирать как чистый C либо объявлять импортируемые функции как Код (Text): extern "C" { // здесь объявление }
как вариант можно сменить расширение исходника с .срр на .с (где-то читал про такое, что компилятор реагирует и компилит как с, а не срр)
он реагирует, но это от чего-то зависит, в т.ч. и от компилятора. build.exe видимо любые сорцы как чистый C компилирует, а в студии есть такое поле в свойствах файла: C/C++->Advanced->Compile As
сделал методом брутфорса. Создал батник FireMe.bat в папке проекта с содержимым: C:\WINDOWS\system32\cmd.exe /k C:\WINDDK\3790\bin\setenv.bat C:\WINDDK\3790 chk WXP Затем сделал изменения в батнике setenv.bat в самом конце cd C:\MyProjects\TcpControl\ build makefile теперь одним нажатием на FireMe.bat проект компилится. Редактирую в студии. Косячно, но добавилось одно лишнее движение и теперь об ошибках смотреть придется в консоли.