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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение выражения http://www.cyberforum.ru/cpp-beginners/thread1076397.html
Помогите, надо написать программу решения задачи.
C++ Напишите программу, считающую выражение Здравствуйте, В общем нужно написать программку, которая будет считать(картинка прилагается) Сам недавно начал изучать С++, пока осваиваю азы. Но вот экзамен через пару дней. Прошу помощи. http://www.cyberforum.ru/cpp-beginners/thread1076396.html
Для строк символов определить какой символ в каждой строке подряд наибольшее число раз C++
Уважаемые завсегдатые данного форума. Нужна ваша помощь: необходимо написать 2 задачи со строками и массивами на С++. Буду благодарен любой помощи. Для строк символов определить какой символ в...
Обратная польская запись.Написал программу по алгоритму.Нужно кое-что изменить C++
Преподаватель дал мне "алгоритм" и сказал написать программу по этому алгоритму. "Алгоритм":Нам понадобится стек для переменных типа char, т.к. исходное выражение мы получаем в виде строки. ...
C++ Удаление из заданного списка все вхождения элемента с заданным значением информационной части http://www.cyberforum.ru/cpp-beginners/thread1076370.html
Написать программу, удаления из заданного списка все вхождения элемента с заданным значением информационной части
C++ Найти ошибку в приведенном коде На самом деле тут две ошибки. Первое, ругается windows при запуске (есть комментарий на какую строку). Второе - не понимаю как сделать умножение ( комментарием помечено). #include <iostream>... подробнее

Показать сообщение отдельно
Убежденный
Системный программист
Эксперт С++
15619 / 7128 / 1128
Регистрация: 02.05.2013
Сообщений: 11,570
Записей в блоге: 1
Завершенные тесты: 1
20.01.2014, 15:10
Цитата Сообщение от pEntity Посмотреть сообщение
Если бы стек удалился, то функция была бы чистым именем, без всяких доп символов.
Вы путаете два понятия - соглашение о вызовах и декорацию имен.

Соглашение о вызовах (calling convention) определяет формат передачи аргументов в функцию.
Например, при _stdcall они передаются через стек, а затем удаляются оттуда вызываемой
функцией, в то время, как при _cdecl за очистку стека отвечает вызывающая сторона.

Декорация имен (name mangling) - "искажение" имен функций или данных во время экспорта.
Результат зависит от типа компоновки (extern "C" или extern "C++"), способа экспорта (DEF-файл
или директива __declspec(dllexport)) и типе соглашения о вызовах.

Чтобы в Visual C++ получить неискаженное имя, нужно или использовать DEF-файл, или
extern "C" + _cdecl.

Вот, набросал простенький примерчик:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
extern "C++"
__declspec(dllexport)
int _stdcall Dllexport_Cpp_Stdcall(int, int)
{
    return 0;
}
 
extern "C++"
__declspec(dllexport)
int _cdecl DllExport_Cpp_Cdecl(int, int)
{
    return 0;
}
 
extern "C"
__declspec(dllexport)
int _stdcall Dllexport_C_Stdcall(int, int)
{
    return 0;
}
 
extern "C"
__declspec(dllexport)
int _cdecl Dllexport_C_Cdecl(int, int)
{
    return 0;
}
 
extern "C++"
int _stdcall Deffile_Cpp_Stdcall(int, int)
{
    return 0;
}
 
extern "C++"
int _cdecl Deffile_Cpp_Cdecl(int, int)
{
    return 0;
}
 
extern "C"
int _stdcall Deffile_C_Stdcall(int, int)
{
    return 0;
}
 
extern "C"
int _cdecl Deffile_C_Cdecl(int, int)
{
    return 0;
}
Содержимое DEF-файла:
Код
LIBRARY "MyLibrary.dll"

EXPORTS
    Deffile_Cpp_Stdcall
    Deffile_Cpp_Cdecl
    Deffile_C_Stdcall
    Deffile_C_Cdecl
Вот какие имена получили экспортируемые функции:
Код
?DllExport_Cpp_Cdecl@@YAHHH@Z
?Dllexport_Cpp_Stdcall@@YGHHH@Z
Dllexport_C_Cdecl
_Dllexport_C_Stdcall@8
Deffile_C_Cdecl
Deffile_C_Stdcall
Deffile_Cpp_Cdecl
Deffile_Cpp_Stdcall
6
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru