примечание: в первую очередь я использую Visual Studio 2010.
Обычно мне нужны dll с некоторыми экспортированными функциями, которые мне нужно использовать из внешних приложений.
Обычно это мой способ.Заголовок DLL выглядит ...
#define DLLAPI extern "C" __declspec(dllexport)
DLLAPI BOOL WINAPI FUNCTION1(...);
DLLAPI BOOL WINAPI FUNCTION2(...);
Я не добавляю никаких команд в проект или что-либо еще, все, что я делаю, чтобы экспортировать их - это в заголовках + добавление DLLAPI к функциям в исходном файле ofc.
Теперь, когда мне нужно получить имя функции из моего внешнего приложения, это вызывает у меня проблемы, потому что это всегда что-то вроде FUNCTION1xa1 @ accept79sax_ или что-то в этом роде ...
Я видел проект, который используетФайл .DEF и делает его заголовки похожими на ...
// INCLUDE FILE generated by "Pelles C for Windows, version 3.00".
#ifndef _HOOK_H
#define _HOOK_H
#ifdef _HOOK_
#define HOOKAPI __declspec(dllexport)
#else
#define HOOKAPI __declspec(dllimport)
#endif /* _HOOK_ */
#ifndef WINAPI
#define WINAPI __stdcall
#endif
HOOKAPI int WINAPI SampleFunction(int, int);
#endif /* _HOOK_H */
, а его файл .def выглядит так ...
EXPORTS
SetValuesCBT
SetValuesKey
SetValuesMouse
MouseProc
KeyProc
CBTProc
SECTIONS
.shared READ WRITE SHARED
Это приводит к очень четким именам экспортируемых функций, так же какони называются (как доказано dumpbin.exe), между прочим, если это имеет значение, он также имеет файл .pjj со следующим содержимым ...
#
# PROJECT FILE generated by "Pelles C for Windows, version 5.00".
# WARNING! DO NOT EDIT THIS FILE.
#
POC_PROJECT_VERSION = 5.00.1#
POC_PROJECT_TYPE = 1#
POC_PROJECT_ARGUMENTS = #
CC = pocc.exe#
AS = #
RC = porc.exe#
LINK = polink.exe#
SIGN = posign.exe#
CCFLAGS = -Tx86-coff -Ot -W1 -Ze -Gz#
ASFLAGS = -c -nologo -coff -W1 -Cu#
RCFLAGS = -r#
LINKFLAGS = -machine:ix86 -subsystem:windows kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib advapi32.lib delayimp.lib -dll#
WizCreator = Pelle Orinius#
SIGNFLAGS = -location:CU -store:MY -timeurl:http://timestamp.verisign.com/scripts/timstamp.dll -errkill#
INCLUDE = $(PellesCDir)\Include\Win;$(PellesCDir)\Include#
LIB = $(PellesCDir)\Lib\Win;$(PellesCDir)\Lib#
.SILENT:
#
# Build hook.dll.
#
hook.dll: \
output\DLL.obj \
EXPORTS.DEF
$(LINK) $(LINKFLAGS) -out:"$@" $**
#
# Build DLL.obj.
#
output\DLL.obj: \
DLL.C
$(CC) $(CCFLAGS) "$!" -Fo"$@"
.EXCLUDEDFILES:
Я не знаю, как мне эмулировать это в моем VS 2010проект, поэтому, когда я строю свои имена функций DLL арпросто и точно?