почему символ @number в конце экспортированной функции dll - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть 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 dumpbin / export, почему существуют имена функций, начинающиеся с подчеркивания '_' и заканчивающиеся '@number', Примечание: exe использует, скажем, (оформленные) функции, и как я могу создать новую dll и экспортировать функции, которые содержат @,

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

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

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

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

0 голосов
/ 25 декабря 2018

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

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