注意:首先,我正在使用Visual Studio 2010。
通常我需要具有一些导出功能的dll,我需要从外部应用程序使用。
通常这就是我的dll标头的样子...
#define DLLAPI extern "C" __declspec(dllexport)
DLLAPI BOOL WINAPI FUNCTION1(...);
DLLAPI BOOL WINAPI FUNCTION2(...);
我没有在项目中添加任何命令,也没有添加任何命令,我要做的就是将它们导出到头文件中,并将DLLAPI添加到源文件ofc中的函数中。
现在,当我需要从外部应用程序获取函数名称时,这使我感到麻烦,因为它总是像FUNCTION1xa1 @ assu79sax_之类的东西。
我看到了一个使用.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函数名称时既简单又精确?
最佳答案
如上所示,仅使用两个函数创建DEF文件,然后进入链接选项并指定使用此def文件。
来自http://msdn.microsoft.com/en-us/library/34c30xs1%28v=vs.80%29.aspx
/ DEF选项传递一个
模块定义文件(.def)
链接器。只能有一个.def文件
指定为LINK。有关详细信息
.def文件,请参阅模块定义
文件。要在以下位置设置此链接器选项
Visual Studio开发
环境
打开项目的“属性页”对话框。有关详细信息,请参见
设置Visual C ++项目属性。
单击链接器文件夹。
单击输入属性页面。
修改模块定义文件属性。
要从内部指定.def文件
开发环境,你应该
将其与其他项目一起添加到项目中
文件,然后将文件指定给
/ DEF选项。
关于c++ - 如何从内置的DLL中获取清晰的-export函数名称?我总是得到原名+胡言乱语,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6396474/