![]() |
|
|
![]()
|
|
| BorisVorontsov |
|
||||||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Есть библиотка MyLib, экспортирующая __stdcall функции MyFunctionOne и MyFunctionTwo.
Есть MyLib.lib, с перечнем функций, экспортируемых библиотекой (то есть MyFunctionOne и MyFunctionTwo). В проекте на VC++ 6 поключаю MyLib.lib, например, так:
И декларирую функции так:
На свое удивление получаю:
Внимание, вопрос: Как заставить VC++ не портить имена функций с конвенцией __stdcall? -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
||||||
|
|||||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
А вы подключили в проект #include"ваш_файл.h"
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Зачем мне файл *.h?
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Хейдер майлибы в студию.
|
|||
|
||||
| BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Млин, как обявлена экспортированная функция?
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Было бы чему удивляться. Объявление влияет на реальное имя. Можно экспортировать как C, так и C++ имена, но они, естественно должны совпадать как при экспорте, так и при импорте. Либо везде ставь extern С, либо везде убирай. -------------------- ... |
|||
|
||||
| BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Читай первый пост. Внимательно. Какая проницательность... DLL не моя, без исходников. Собственно, вопрос стоял так - как отключить декорацию имен импортируемых __stdcall функций в VC++. -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Читаю. Внимательно. Нахожу только объявление импорта. Если библиотека не твоя, тос чего ты взял, что она там не декорирована. Ты уже тогда поменять ничего не в силе и должен её объявить так (с экстерн "C" или без) как и в самой либе. |
|||
|
||||
| BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Любитель, для самых непонятливых:
Если тебе нравятся красивые слова терминологии, перевожу: Есть WINAPI библиотека, в таблице экспорта которой (что так же указано в её документации) имеются функции MyFunctionOne и MyFunctionTwo. -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Млиин... Речь про то, что экспорт идёт с extern "C" или нет
Посмотри чем угодно таблицу экспорта DLL-ки - проверь имена функций. не даёт результатов. |
|||
|
||||
| BorisVorontsov |
|
||||||||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
OMFG.
Вообще говоря (windef.h):
Это 5 -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
||||||||
|
|||||||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
BorisVorontsov, ну неужели не понятно - я прошу проверить декорированность имён.
А насчёт второго - ты вообще глупость сморозил. А если в библиотеки Васи Пупкина есть такой код (достаточно типичный):
из этого вовсе не следует, что __declspec(dllexport/dllimport) есть API Васи Пупкина. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |