Здравствуйте!
Ситуация следующая:
есть:
A.DLL, экспортирующая около 500 символов (функции и переменные)
нужно:
написать обертку для A.DLL
предполагаемое решение:
создать B.DLL, реализовать в ней часть функций из A.DLL, на остальные символы сделать форвардинг
вопрос:
Подскажите, пожалуйста, можно ли средствами MS VC сделать это, либо нужно писать свою прогу на подобие линкера
Завидую людям, которые могут себе позволить никуда не спешить.
Здравствуйте _Dinosaur, Вы писали:
D>Здравствуйте! D>Ситуация следующая: D>есть: D>A.DLL, экспортирующая около 500 символов (функции и переменные) D>нужно: D>написать обертку для A.DLL D>предполагаемое решение: D>создать B.DLL, реализовать в ней часть функций из A.DLL, на остальные символы сделать форвардинг D>вопрос: D>Подскажите, пожалуйста, можно ли средствами MS VC сделать это, либо нужно писать свою прогу на подобие линкера
В любом случае нужно точки входа в DLL прописать такие же..
Чтобы при загрузке таблица импорта такаже как и для старой DLL сформировалась. Я вот не очень представляю что имеется в виду под прогой наподобие линкера. Ведь по объявленным в длл символам формируется таблица импорта.. Она заполняется при загрузке, когда длл уже загружена в адресное простраство процесса, просто проставляются адреса откуда вызывать функции, а пока ничего не загружено соответственно и адреса неизвестны. Поэтому если не хочется менять все функции, единственный способ это подгрузить нашу новую длл в процесс и подменть адреса символов в таблице.
есть какая-то директива линкеру, что данную ф-ю надо реэкспортировать из другой dll (поройся в MSDN или посморти у Рихтера). Тогда просто в своей dll пишеш имя этой ф-ии и dll из которой она экспортируется.
Здравствуйте DIXX, Вы писали:
DIX>Здравствуйте _Dinosaur, Вы писали:
DIX>В любом случае нужно точки входа в DLL прописать такие же.. DIX>Чтобы при загрузке таблица импорта такаже как и для старой DLL сформировалась. Я вот не очень представляю что имеется в виду под прогой наподобие линкера.
прога: на вход подаются исходная DLL и DLL с перехваченными функциями, на выходе DLL — обертка
DIX>Ведь по объявленным в длл символам формируется таблица импорта.. Она заполняется при загрузке, когда длл уже загружена в адресное простраство процесса, просто проставляются адреса откуда вызывать функции, а пока ничего не загружено соответственно и адреса неизвестны. Поэтому если не хочется менять все функции, единственный способ это подгрузить нашу новую длл в процесс и подменть адреса символов в таблице.
А если винда rebasing DLL-ки сделает?
Завидую людям, которые могут себе позволить никуда не спешить.
_D>Здравствуйте! _D>Ситуация следующая: _D>есть: _D>A.DLL, экспортирующая около 500 символов (функции и переменные) _D>нужно: _D>написать обертку для A.DLL _D>предполагаемое решение: _D>создать B.DLL, реализовать в ней часть функций из A.DLL, на остальные символы сделать форвардинг _D>вопрос: _D>Подскажите, пожалуйста, можно ли средствами MS VC сделать это, либо нужно писать свою прогу на подобие линкера :( :???:
В def-файле пишешь нечто вроде этого:
EXPORTS
SetLastError = kernel32.SetLastError
Имя, под которым экспортируется функция из твоей DLL, может совпадать а может и не совпадать с именем оригинальной функции, это не имеет значения.
То же самое можно сделать и через директиву /export