Имена функций в подцепляемой DLL.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

BBB писал(а):Здесь префикса, разумеется, нет. Но это уже не статическая линковка (Но я, разумеется, не возражаю, что через через GetProcAddress функция находится. Интерсено было понять, возможно ли при данных "условиях задачи" подлинковаться именно статически).
Да, писалась на MS VC (хотя на поставленный вопрос это никак не влияет).
"Отрезать" префикс и постфикс в экспортируемом имени удалось при помощи EXPORTS в DEF-файле.
Только что воспользовался полученным lib файлом и подлинковал dll статически.
Итого имеем:

1) Метод экспротирован без префикса и GetProcAddress(hDll, "func1") работает.
2) Побочно генерируемая lib библиотека абсолютно работоспособна.

Внимание, вопрос: Нахрен тебе было извращаться с обрезанием префикса?
2B OR NOT(2B) = FF
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Hawk писал(а):У меня никаких функций с префиксом линкер не видит если их в EXPORTS прописывать.

а так ругается, что нету такой функции
EXPORTS
ExpFunc = _ExpFunc@4
Возможно, не у тебя не было указано extern "C". Т.е., в любом случае ты "не угадал" внутреннее имя ф-ии, которое "создал" комплятор C++. "Железобетонный" способ узнать внутреннее имя - поискать контекстно в созданном obj-файле. Т.е. ищешь ExpFunc (так как эта часть уж всяко будет присутствовать в имени), а когда находишь, смотришь, что еще этот текст "окружает". Это и будет "внутреннее" имя, которое надо прописывать в DEF-файл, если использовать в нем конструкцию entryname=internalname
Ответить