Всем здравствуйте!
Есть dll — она экспортирует функции (имена без манглирования как в WinAPI) Соглашение о вызове — тоже __stdcall.
Вопрос — как залинковать библиотеку к файлу?
// линкует, но рушит стек, т.к. __cdeclextern"C"double f(double, double);
// не может линкануть, т.к. имя __imp_?f@@YGNNN@Z__declspec(dllimport) double __stdcall f(double, double);
// не может линкануть, т.к. имя _wspUPT@16 extern"C"double __stdcall f(double, double);
// Такой способ используется в заголовках windows sdk.
// Как избавиться от размера передаваемых аргументов на
// конце? может есть какая-то спец опция компилятора?
Помогите, плз, кто может!!!
13.01.03 17:03: Перенесено модератором из 'C/C++' в "Средства разработки" — ПК
Re: Как линковать DLL c __stdcall без манглирования
и радуйся жизни!
N>Всем здравствуйте! N>Есть dll — она экспортирует функции (имена без манглирования как в WinAPI) Соглашение о вызове — тоже __stdcall. N>Вопрос — как залинковать библиотеку к файлу? N>
N>// линкует, но рушит стек, т.к. __cdecl
N>extern"C"double f(double, double);
N>// не может линкануть, т.к. имя __imp_?f@@YGNNN@Z
N>__declspec(dllimport) double __stdcall f(double, double);
N>// не может линкануть, т.к. имя _wspUPT@16
N>extern"C"double __stdcall f(double, double);
N> // Такой способ используется в заголовках windows sdk.
N> // Как избавиться от размера передаваемых аргументов на
N> // конце? может есть какая-то спец опция компилятора?
N>
N>Помогите, плз, кто может!!!
... << RSDN@Home 1.0 beta 4 >> silent
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re: Как линковать DLL c __stdcall без манглирования
Здравствуйте, nnye, Вы писали:
N>Всем здравствуйте! N>Есть dll — она экспортирует функции (имена без манглирования как в WinAPI) Соглашение о вызове — тоже __stdcall. N>Вопрос — как залинковать библиотеку к файлу? N>
N>// линкует, но рушит стек, т.к. __cdecl
N>extern"C"double f(double, double);
N>// не может линкануть, т.к. имя __imp_?f@@YGNNN@Z
N>__declspec(dllimport) double __stdcall f(double, double);
N>// не может линкануть, т.к. имя _wspUPT@16
N>extern"C"double __stdcall f(double, double);
N> // Такой способ используется в заголовках windows sdk.
N> // Как избавиться от размера передаваемых аргументов на
N> // конце? может есть какая-то спец опция компилятора?
N>
Здравствуйте, Valerio, Вы писали:
V>добавь .def file такого типа:
V>EXPORTS V> f PRIVATE
V>и радуйся жизни!
N>>Всем здравствуйте! N>>Есть dll — она экспортирует функции (имена без манглирования как в WinAPI) Соглашение о вызове — тоже __stdcall. N>>Вопрос — как залинковать библиотеку к файлу? N>>
N>>// линкует, но рушит стек, т.к. __cdecl
N>>extern"C"double f(double, double);
N>>// не может линкануть, т.к. имя __imp_?f@@YGNNN@Z
N>>__declspec(dllimport) double __stdcall f(double, double);
N>>// не может линкануть, т.к. имя _wspUPT@16
N>>extern"C"double __stdcall f(double, double);
N>> // Такой способ используется в заголовках windows sdk.
N>> // Как избавиться от размера передаваемых аргументов на
N>> // конце? может есть какая-то спец опция компилятора?
N>>
N>>Помогите, плз, кто может!!!
V>
К сожалению такой вариант не работает...
Единственое решение, которое я нашел, — линковать по ординалу — но это плохо, поскольку в другой версии длл ордииналы могут поменяться
Re[2]: Как линковать DLL c __stdcall без манглирования
Здравствуйте, kmn, Вы писали:
kmn>Здравствуйте, nnye, Вы писали:
N>>Всем здравствуйте! N>>Есть dll — она экспортирует функции (имена без манглирования как в WinAPI) Соглашение о вызове — тоже __stdcall. N>>Вопрос — как залинковать библиотеку к файлу? N>>
N>>// линкует, но рушит стек, т.к. __cdecl
N>>extern"C"double f(double, double);
N>>// не может линкануть, т.к. имя __imp_?f@@YGNNN@Z
N>>__declspec(dllimport) double __stdcall f(double, double);
N>>// не может линкануть, т.к. имя _wspUPT@16
N>>extern"C"double __stdcall f(double, double);
N>> // Такой способ используется в заголовках windows sdk.
N>> // Как избавиться от размера передаваемых аргументов на
N>> // конце? может есть какая-то спец опция компилятора?
N>>
N>>Помогите, плз, кто может!!!
kmn> kmn>Попробуй так: kmn>
kmn>хотя третий вариант должен работать
Тоже пробовал — не работает (я его не включил сразу как очевидный, поскольку dllimport добавляет к имени __imp__)
Единственое решение, которое я нашел, — линковать по ординалу — но это плохо, поскольку в другой версии длл ордииналы могут поменяться
Re: Как линковать DLL c __stdcall без манглирования
Ложим Tapi32.def рядом с Tapi32.dll.
Запускаем LIB.EXE /MACHINE:I386 /DEF:c:\(путь)\tapi32.def
Рядом образуется Tapi32.lib. Включаем его в проект (Add Files To Folder).
Александр
Re[2]: Как линковать DLL c __stdcall без манглирования
Я поторопился, при запуске программы вышло сообщение, что lineConfigDialog@12 не найдена!
Так что вопрос открытый, а вобщем, мне не нравится как в MSDN про это умалчивают, ну не надо это Вам знать! — вот как я это понимаю.
Александр
Re[3]: Как линковать DLL c __stdcall без манглирования
U>Я поторопился, при запуске программы вышло сообщение, что lineConfigDialog@12 не найдена! U>Так что вопрос открытый, а вобщем, мне не нравится как в MSDN про это умалчивают, ну не надо это Вам знать! — вот как я это понимаю.
все же я бы порекомендовал сделать так: привожу .def, .h, .cpp файлы
это работает для реализации плагина к Fidolook
HRESULT WINAPI EMH_GetVendorInfo( EMH_VENDORINFO_DATA* pData )
{
//code here
}
... << RSDN@Home 1.0 beta 4 >> silent
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.