Здравствуйте, Аноним, Вы писали:
А>Что касается "все работало" — здесь есть небольшие сложности. Да, все работает. Но! Если Вы используете функции уведомления состояния загрузки (helper-функции)... точнее, пытаетесь их использовать, то здесь начинается самое интересное. Мне не совсем, например, очевидно (ламер?
), КАК можно скомпилировать static library (а M$ это сделали!), чтобы не нарушалось правило одного определения (при условии, что а) либо мы ОПРЕДЕЛЯЕМ указатели на helper-функции в явном виде б) или не ОПРЕДЕЛЯЕМ их вообще) — т.е. так, как это делается при использовании "официального" lib-файла с официальным же DelayImp.h!
А>Буду признателен за идеи?!
Есть такое понятие как "weak external" — это символ, который используется линкером, если он не был определён в других модулях. А если был, линкер игнорирует weak external и не ругается. Например, символы new, delete и DllMain используются и в CRT, и в MFC, но благодаря тому что в CRT они weak externals, всё линкуется как надо (до тех пор пока MFC линкуется раньше CRT, если они случайно поменяются местами, сразу получим кучу ошибок). Думаю, этот механизм используется и в delayimp.lib.