почему символ @number в конце экспортированной функции dll

У меня есть dll, которая содержит более 400 функций, и мой exe-файл использует только 15 функций из dll, поэтому мне нужно создать новую dll и экспортировать функции и подделать их возвращаемые значения для имитации вывода более сложной системы ,

Что я пробовал:

 #include "stdafx.h"
//the compiler complains about the '@20'

__declspec ( dllexport ) XLStatus _xlActivateChannel@20(XLportHandle,  XLuint64, unsigned int, unsigned int)
{
return 0;
}

// causing the exe to crash

dumpbin / exports vxlapi.dll (оригинальная dll): показывать повторяющиеся имена функций (не для всех функций)

ordinal  name
_xlActivateChannel@20
14       xlActivateChannel

Примечание: в заголовочном файле библиотеки DLL функции объявлены так:

DECL_STDXL_FUNC ( xlActivateChannel, XLACTIVATECHANNEL, (
XLportHandle  portHandle,
XLaccess      accessMask,
unsigned int  busType,
unsigned int  flags)
);

в дампбине / экспорт dll
почему существуют имена функций, начинающиеся с подчеркивания ‘_’ и заканчивающиеся ‘@number’, обратите внимание: исполняемый файл использует, скажем, (оформленные) функции, и как я могу создать новую dll и экспортировать функции, содержащие @,

1

Решение

«@n» используется stdcall Соглашение о вызовах. Вам не нужно упоминать это в вашей декларации, вам просто нужно изменить свою декларацию на stdcall так что компилятор знает, что они должны быть украшены суффиксами «@n». Как это:

__declspec ( dllexport ) XLStatus __stdcall _xlActivateChannel(XLportHandle,  XLuint64, unsigned int, unsigned int)
1

Другие решения

Распределение имен типично для C ++ и т. Д., Поэтому вы видите эти символы в экспорте. Экспорт Ansi C не поврежден. Символ @ не допускается. Вы можете попробовать AT или _AT.

extern «C» используется для удаления искажения для типов C. Is не работает с классом или другими типами C ++.

Я читаю слишком быстро, но Джон более прав.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector