Я точно знаю, что NuMega Driver Studio умела писать код с использованием объектов, который замечательно собирался с помощью build.exe. Кто-нибудь может подсказать как это делается? Нумегу лишний раз ставить/сносить только ради того чтобы посмотреть как они там с объектами работают как-то не хочется... ЗЫ: Ошибки такие: Linking Executable - i386\klogger.sys for i386 klogger.obj() : error LNK2019: unresolved external symbol _atexit referenced in function _$E1 klogger.obj() : error LNK2019: unresolved external symbol "public: __thiscall CLogQueue::CLogQueue(void)" (??0CLogQueue@@QAE@XZ) referenced in function _$E1 klogger.obj() : error LNK2019: unresolved external symbol "public: __thiscall CL ogQueue::~CLogQueue(void)" (??1CLogQueue@@QAE@XZ) referenced in function _$E2 klogger.obj() : error LNK2019: unresolved external symbol "public: void __thiscall CLogQueue::PutString(char *)" (?PutString@CLogQueue@@QAEXPAD@Z) referenced in function "long __stdcall InitializeLogger(void)" (?InitializeLogger@@YGJXZ) i386\klogger.sys() : error LNK1120: 4 unresolved externals BUILD: Done 2 files compiled - 190 LPS 1 executable built - 5 Errors ЗЗЫ: Шото да собралось, но думаю врядли оно будет работать нормально
не юзай статические обекты с юзер-дефайнед конструкторами и деструкторами, вынеси их в одельные методы и вызывай руками как в дельфи... можно ли это обойти не искал... имхо такие объекты ошибка дизайна
Кароче, уже спать типа лег, и вспомнил что файл loqueue.cpp забыл в sources прописать Прописал - осталась только одна ошибка: driver.obj() : error LNK2019: unresolved external symbol _atexit referenced in function _$E1 i386\klogger.sys() : error LNK1120: 1 unresolved externals Она возникала когда я обект определял глобально. Если определять локально, на стеке, то все ОК... Кастати да, fr0b-p, если убрать конструктор и деструктор, то все работает. Спасибо!
трабла из-за того что конструкторы статиков вызываются до твоего кода а деструкторы после завершения --> компиль цепляет c-runtime... если легко удалось статик заменить авто-объеком то ошибка дизайна исправлена но глобальные объекты бывают нуны и чтоб не дергать по пустякам IoAllocateDriverObjectExtension мона примерно так: #include <new> class my { my(); // user-defined constructor static my & instance() { static char storage[sizeof(my)]; my * const ptr = (my*)storage; static bool initialized; if ( !initialized ) { new ( ptr ) my(); // placement new initialized = true; } return *ptr; } }; типа паттерн singleton если надо деструктор то придется делать обертку с подсчетом ссылок