Экспортирование функций под Visual C++

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Shmuel
Posts: 6319
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 387 times

Экспортирование функций под Visual C++

Post by Shmuel »

До сих пор обходился GCC, сейчас пробую Visual C++.
GCC позволяет передать линкеру -Wl,--kill-at , при этом __stdcall функции будут экспортироваться под своими нормальными именами, как в исходниках. Для VC++ что-то не получается найти такой способ, функции экспортируются наподобие _OpenW@4.
Знаю, что это лечится def-файлом, но вопрос: есть ли способ обойтись без def-файла?
User avatar
HaRT
Moderator
Posts: 9774
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 128 times
Been thanked: 267 times

Экспортирование функций под Visual C++

Post by HaRT »

Shmuel wrote: Thu 19 Mar, 2020 20:59 есть ли способ обойтись без def-файла?
А они обрамлены в extern "C" { /* your functions here */ }?
Last edited by HaRT on Thu 19 Mar, 2020 21:51, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
DrKnS
Posts: 5902
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 11 times
Been thanked: 364 times

Экспортирование функций под Visual C++

Post by DrKnS »

/EXPORT (передать линкеру или прагмой прямо в коде).
Shmuel
Posts: 6319
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 387 times

Экспортирование функций под Visual C++

Post by Shmuel »

HaRT, да, обрамлены.

DrKnS, для каждой экспортируемой функции? Если да, то может есть у вас какой-то (препроцессорный) макрос, чтобы меньше засорять код?
User avatar
DrKnS
Posts: 5902
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 11 times
Been thanked: 364 times

Экспортирование функций под Visual C++

Post by DrKnS »

#define EXPORT_THIS __pragma(comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__))
Shmuel
Posts: 6319
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 387 times

Экспортирование функций под Visual C++

Post by Shmuel »

DrKnS, спасибо, оно сработало: проверил на одной функции, поставил макрос после открывающей скобки { - это правильно?
И также нежелательный момент - функция была экспортирована дважды: как в оригинальном виде, так и как _funcname@4.
User avatar
DrKnS
Posts: 5902
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 11 times
Been thanked: 364 times

Экспортирование функций под Visual C++

Post by DrKnS »

Shmuel wrote: Thu 19 Mar, 2020 23:04после открывающей скобки { - это правильно?
Да.
функция была экспортирована дважды
Сейчас проверил (dumpbin /exports <dll name>) - у меня один раз.
Shmuel
Posts: 6319
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 387 times

Экспортирование функций под Visual C++

Post by Shmuel »

DrKnS wrote: Thu 19 Mar, 2020 23:11 Сейчас проверил (dumpbin /exports <dll name>) - у меня один раз.
Сделал то же самое - экспортируется дважды. Может потому, что в режиме DEBUG, а в RELEASE по-другому?
Shmuel
Posts: 6319
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 387 times

Экспортирование функций под Visual C++

Post by Shmuel »

Или может быть надо в этом случае убрать __declspec(dllexport) ?
User avatar
DrKnS
Posts: 5902
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 11 times
Been thanked: 364 times

Экспортирование функций под Visual C++

Post by DrKnS »

Дважды - это в смысле 2 строки в выводе dumpbin или что-то типа func = @blablabla(_func@4)?
Shmuel
Posts: 6319
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 387 times

Экспортирование функций под Visual C++

Post by Shmuel »

Code: Select all

          1    0 000C3BCA IcpStartApplication = @ILT+11205(_IcpStartApplication@4)
        <пропущено>
        257  100 000C3BCA _IcpStartApplication@4 = @ILT+11205(_IcpStartApplication@4)
User avatar
DrKnS
Posts: 5902
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 11 times
Been thanked: 364 times

Экспортирование функций под Visual C++

Post by DrKnS »

test.zip
(38.62 KiB) Downloaded 36 times
User avatar
DrKnS
Posts: 5902
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 11 times
Been thanked: 364 times

Экспортирование функций под Visual C++

Post by DrKnS »

Может у вас там где-то выше по тексту (или в другом файле) декларация с __declspec(dllexport) осталась?
Shmuel
Posts: 6319
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 387 times

Экспортирование функций под Visual C++

Post by Shmuel »

1. Ваш тестовый комплект у меня сработал правильно - с одним экспортом. Так что дальше - дело техники.
2. __declspec(dllexport) вроде убрал, но не помогло. Завтра разберусь.
Спасибо!
Post Reply

Return to “Разработка плагинов”