#include <windows.h>
#include <winioctl.h>
heders from ddk
VS2008. Создаю консольный пустой проект, пишу пустой main, #include <windows.h> #include <ntddscsi.h> ну и к ней #include <devioctl.h>. Указываю пути. Компилю. 102 ошибки, в основном типа syntax error на всякие скобки, запятые, есть ошибки других типов, но все именно по коду, а не линкера. Файлы на которые ругается — ctype.h, кажется stddef.h и еще пару подобных из crt в основном.
Я в задумчивости — в хедерах и в самом ддк я нигде не видал каких-то дополнительные пояснений. extern C пробовал .
Первая моя мысль, что может какой-то параметр компиляции или линкования надо задать, но какой.. не понятно.
Вторая мысль — в ддк есть свои хедеры crt, mfc, api и я видал какие-то библиотеки явно имеющие аналоги в винде и/или в sdk студии. Может надо использовать их? Но как? Для каждой ручками указать в проекте путь? А библиотеки? Есть ли способ сказать компилятору, чтобы он сначала искал в папках ддк, и только, если там нет искал в остальных? Указать пути ко всем папкам с хэдерами в ддк в проекте и инклудить их как "" ?
Цитата: Mhael
Файлы на которые ругается — ctype.h, кажется stddef.h и еще пару подобных из crt в основном.
Ругается - не может открыть или ошибки в этих файлах? Тексты ошибок (первых) в студию.
Error 121 error C2059: syntax error : ')' c:\winddk\7600.16385.0\inc\api\crt\stl70\iosfwd 353 MyProg
Error 8 error C2061: syntax error : identifier '_Elem' c:\winddk\7600.16385.0\inc\api\crt\stl70\iosfwd 202 MyProg
Error 111 error C2065: '_Count' : undeclared identifier c:\winddk\7600.16385.0\inc\api\crt\stl70\iosfwd 337 MyProg
Error 689 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\winddk\7600.16385.0\inc\api\crt\stl70\iosfwd 373 MyProg
Что-то тут наверное с конфликтом crt-ых хедеров из ддк и сдк ... Я в растерянности
Вообщем совет такой (могу лохануться :)): включите в настройках Show includes. Посмотрите, какие заголовки включаются из sdk. Найти соответствие им в ddk и добавьте этот путь.
Сделал. Вижу, что все инклудится из ддк. Но, что это мне даёт..? ((
Цитата: Mhael
Но, что это мне даёт..? ((
Видимо ничего. К сожалению нет под рукой нужной версии ddk. Можете заархивировать папку inc и выложить ее?
У меня иклудился C:\WinDDK\7600.16385.0\inc\api\crt\stl70 , а как только поменял на stl60 , то все стало хорошо. Конечно может не все проблемы позади и что-то выплывет на стадии дебага и работы, но пока все скомпилилось.
Извиняюсь, что потратил попусту ваше время, в который раз уже меня подводит невнимательность :(
[COLOR="Gray"]O_o stl в DDK.. Дождались.. :) Надеюсь что в каком-нить KMDF только[/COLOR]
ddk мне для работы со скази. Через spti. А стл - просто махом пути на ддк перевел, потом конечно постараюсь оттуда только необходимый минимум инклудить, как разберусь в зависимостях.
Для SPTI клиентского приложения вам за глаза хватит Platform SDK в базе MSVC. Там это все есть, можно поиском пройтись. Там структур-то раз, два и обчелся - конкретные структуры SCSI все равно самому писать. Их в CDB и т.д. Да пара IOCTL кодов. Я бы не мешал заголовки DDK к компилятору MSVC. DDK немного вещь в себе - у нее и компилятор есть и либы и инклюды. Обычно если прикручивают DDK к студии так чтобы в студии синтаксис и интеллисенс был (используется только как редактор) - все остальное (компилятор, либы, инклуды) - заменяется DDK-шным. Ну и как бы там чистый C, а в студии по умолчанию Цпп...
Ntddscsi.h требуется для IOCTL_SCSI_PASS_THROUGH_DIRECT и этот хедер есть в ddk, а в sdk нет. Он тянет за собой еще хедеры, например guiddef.h, devioctl.h, sdkddkver.h (их тоже нет в сдк) и они вполне возможно тянут еще какие-то из ддк. Ну и библиотеки же еще небось какие-то нужны и они из ддк только..
конечно я могу написать сам структуру SCSI_PASS_THROUGH_DIRECT и значение IOCTL_SCSI_PASS_THROUGH_DIRECT , но сработает ли это..? надо попробовать..
%PROGRAMFILES%\Microsoft Visual Studio 8\VC\PlatformSDK\Include\ntddscsi.h
оно есть. И в нем есть директ. В конце-концов это просто число :)
ПыСы. Мыслите в верном направлении. Сработает. Но работает и так.
Вы небось
Код:
в stdafx перед ntdd.. забыли
Ладно, я написал структуру и значения сам и все заработало :) В смысле все скомпилировалось, как оно будет дальше - посмотрим ..
Вы не в курсе, что с 2008 стало с ntddscsi ? :)
Тогда скачайте к ней PlatformSDK - должон появиться. Что в 2008й не знаю, странно, должен быть. Надо будет проверить.