![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Доброго времени суток!
Пишу DLL. Необходимо использовать __stdcall, однако при этом экспортируемые функции декорируются... Т.е. функцию int Sum(int, int) придется вызывать с помощью GetProcAddress как _Sum@8. Думал extern "C" исправит ситуацию, но ничего не изменилось. Как можно экспортировать функции с недекорированными именами не прибегая к использованию DEF-файлов? Сейчас я пишу так:
Что нужно изменить? |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
сталкивался с такой проблемой. Обходил либо DEF-файлами, либо тип вызова указывал __cdecl. В обоих случаях экспортируется без декорирования
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Superklug |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
borisbn, я создал DEF-файл. Вроде экспортируются функции без декорирования. Но похоже я их использую как-то неправильно... Видимо нужно указывать __stdcall, но я не знаю как. Сейчас пишу вот так:
Все ли я правильно делаю? hLib и func не NULL, т.е. вроде все нормально, но при вызове возникает ошибка. Либо у меня в библиотеке что-то не так, либо вызываю неправильно... Видимо надо так:
Это сообщение отредактировал(а) Superklug - 28.10.2010, 08:31 |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ничего при импорте просто поменять dllexport на dllimport, за декорирование отвечает еще и extern, так что если импорт был без него, естественно ничего не получится -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
||||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
для my.dll:
для my.exe:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
icecrashldr |
|
||||
![]() Developer ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 5.7.2010 Репутация: нет Всего: нет |
Вы вызываете функция как __cdecl (дефолт значения для компилира) а надо как __stdcall http://msdn.microsoft.com/en-us/library/98...v=VS.80%29.aspx
Да надо так..
|
||||
|
|||||
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
GremlinProg, я не могу пользоваться lib файлом...
icecrashldr, спасибо! Так вроде все работает... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |