Необходимо выполнить экспорт некой функции ?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z В def файле пишу LIBRARY MyLib.dll EXPORTS ?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z = MyFunc а экспортируется только часть, до первой "собаки" ?DisplayFullExternal Каким образом можно выполнить экспорт такой функции? Методом через Ж.. мне удалось, но пришлось править имена вручную. А можно как-нибудь по простому?
Сделайте С-кальный или Стд-кальный переходник. Наверно не стоит править С++ имена в другую конвенцию вручную. Можно получить загадочных ошибок много.
S_Alex Если хочешь, чтобы работал Код (Text): pfn = GetProcAddress(hMyLib, "MyFunc"); то надо писать наоборот Код (Text): LIBRARY MyLib.dll EXPORTS MyFunc = ?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z
Можно ещё вручную поправить имя экспортируемой функции после сборки. Или написать простенькую тулзу, которая будет это делать сама (и запихнуть её в Post-build step).
S_Alex Или надо чтобы работал Код (Text): pfn = GetProcAddress(hMyLib, "?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z");
Решается в 3 строчки с использованием ImpLib: Код (Text): include '..\implib.inc' implib MyLib.dll, MyFunc, ?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z endlib Компилируем в .lib, дизасмим: Код (Text): .text:00000000 ; public: virtual bool __thiscall CF878AVideoDisplayer::DisplayFullExternal(unsigned long, unsigned long) .text:00000000 public ?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z .text:00000000 ?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z proc near .text:00000000 jmp __imp__MyFunc .text:00000000 ?DisplayFullExternal@CF878AVideoDisplayer@@UAE_NKK@Z endp Цепляю тестовый либ-файл.