Форум программистов, компьютерный форум CyberForum.ru

Как верно экспортить функцию? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
20.01.2014, 14:12     Как верно экспортить функцию? #1
C++
1
2
3
4
5
6
7
#define _DECLARATOR_ __declspec(dllexport)
 
 
_DECLARATOR_ void __cdecl SumFunc()
{
    return;
}
C++
1
2
3
.text:10001000 ; void __cdecl SumFunc(void *__formal, void *__formal)
.text:10001000                 public ?SumFunc@@YAXXZ
.text:10001000 ?SumFunc@@YAXXZ proc near


__cdecl должно было удалить лишнии символы в стеке О_о

______________________________________________________________________________

C++
1
2
3
4
extern "C" void __declspec(dllexport) SumFunc()
{
    return;
}
C++
1
2
3
.text:10001000 ; void __cdecl SumFunc(void *__formal, void *__formal)
.text:10001000                 public _SumFunc
.text:10001000 _SumFunc        proc near
В этом варианте с __cdecl так же ничего не измениться.

________________________________________________________

C++
1
2
3
4
void __declspec(dllexport) SumFunc()
{
    return;
}
C++
1
2
3
.text:10001000 ; void __cdecl SumFunc(void *__formal, void *__formal)
.text:10001000                 public ?SumFunc@@YAXXZ
.text:10001000 ?SumFunc@@YAXXZ proc near

Так как же верно экспортить? Для чего extern "C" ? __declspec(dllexport) пихать перед void или после ? Как сделать, чтоб имя было без любых доп символов ?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 14:12     Как верно экспортить функцию?
Посмотрите здесь:

Как передать указатель на функцию в функцию C++
как мне функцию одного класса в функцию базового вставить C++
C++ Задача логические функции (составить функцию, которая определяет верно ли что сумма цифр числа четное число)
не могу разобраться как написать функцию сортировки и исправить функцию добавления в стек C++
Перегрузка операций (Создать класс вещественных чисел (double); определить оператор +, как функцию-элемент и – как дружественную функцию) C++
Как верно перевести формулу на язык c++? C++
C++ Как разделить функцию на функцию?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Заблокирован
21.01.2014, 18:47     Как верно экспортить функцию? #41
Цитата Сообщение от HighPredator Посмотреть сообщение
Это лирика.
О таблице совместимости, я ее приводил для обоих компиляторов в начале:

Соглашение о вызове VC++ C++ Builder
__stdcall _MyFunction@4 MyFunction
__cdecl MyFunction _MyFunction

Цитата Сообщение от HighPredator Посмотреть сообщение
Этот файл вообще нужен только на этапе компоновки. Компилятор тут никаким боком.
Во-вторых, объектные двоичные файлы (.obj и .lib), создаваемые BCB, несовместимы с объектными файлами VC, и, следовательно, не могут быть прилинкованы к VC-проекту. Это означает, что при желании использовать неявное связывание (linking) c dll необходимо каким-то образом создать .lib-файл (библиотеку импорта) формата, которого придерживается Microsoft.
http://www.rsdn.ru/article/devtools/bcbdll.xml
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5384 / 1767 / 323
Регистрация: 10.12.2010
Сообщений: 5,226
Записей в блоге: 3
22.01.2014, 15:58     Как верно экспортить функцию? #42
Ну собственно я не успокоился и нашел вот что. Есть такой мануал: http://agner.org/optimize/calling_conventions.pdf в котором есть следующее (заскринил две страницы). Если кратко, то суть в том, что манглирование это не только платформо-специфичная вещь как говорилось ранее, но и компилятор-специфичная. Исходя из таблицы действительно, как и было сказано на мсдн, реально избежать манглирования можно только с помощью деф файла.
Миниатюры
Как верно экспортить функцию?   Как верно экспортить функцию?  
Avazart
Заблокирован
22.01.2014, 16:22     Как верно экспортить функцию? #43
А что тут нового ? Смотрим в таблицу видим что при extern "C" _сdecl и компиляторе Microsoft нет подчеркивания.

Не по теме:

P.S: Хм думал что под платформой подразумевается именно компилятор/разрядность ведь dll только по Windows вроде...

HighPredator
 Аватар для HighPredator
5384 / 1767 / 323
Регистрация: 10.12.2010
Сообщений: 5,226
Записей в блоге: 3
22.01.2014, 16:26     Как верно экспортить функцию? #44
Цитата Сообщение от Avazart Посмотреть сообщение
и компиляторе Microsoft нет подчеркивания
В 64 битном нет. В 32 битном да.
Avazart
Заблокирован
22.01.2014, 16:48     Как верно экспортить функцию? #45
Ну у меня как раз 32битка, специально скомпилил проект в MSVC++2010 - нет там никакого подчеркивания
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 16:55     Как верно экспортить функцию?
Еще ссылки по теме:

C++ Как верно узнать размер указателя ?
Как передать функцию в функцию? C++
Как правильно вызвать функцию с указателем на другую функцию как параметр C++
C++ Как вызвать функцию чужого приложения, как подменить значения аргументов функции?
Как сделать функцию, которая тип данных использует как параметр? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
Заблокирован
22.01.2014, 16:55     Как верно экспортить функцию? #46
Скрин
Миниатюры
Как верно экспортить функцию?  
Yandex
Объявления
22.01.2014, 16:55     Как верно экспортить функцию?
Ответ Создать тему
Опции темы

Текущее время: 12:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru