如何从构建的DLL中获得清晰的导出函数名?我总是听到原创的名字+胡言乱语
How can i get clear -export function names from built DLL? I always get originalname+gibberish
注意:首先,我使用的是visualstudio 2010。
通常我需要一些导出函数的dll,我需要从外部应用程序使用。。
通常这就是我的dll头的样子。。。
#define DLLAPI extern "C" __declspec(dllexport)
DLLAPI BOOL WINAPI FUNCTION1(...);
DLLAPI BOOL WINAPI FUNCTION2(...);
我不向项目或任何东西添加任何命令,我所做的只是在头文件中导出它们+向源文件ofc中的函数添加DLLAPI。
现在,当我需要从外部应用程序中获取函数名称时,这会给我带来问题,因为它总是像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所证明的)btw。如果重要的话,它还有带有以下内容的.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)IncludeWin;$(PellesCDir)Include#
LIB = $(PellesCDir)LibWin;$(PellesCDir)Lib#
.SILENT:
#
# Build hook.dll.
#
hook.dll:
outputDLL.obj
EXPORTS.DEF
$(LINK) $(LINKFLAGS) -out:"$@" $**
#
# Build DLL.obj.
#
outputDLL.obj:
DLL.C
$(CC) $(CCFLAGS) "$!" -Fo"$@"
.EXCLUDEDFILES:
我不知道我应该如何在我的VS2010项目中模仿这一点,所以当我构建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++项目属性
- 单击Linker文件夹
- 单击"输入"属性页
- 修改"模块定义文件"属性
要从开发环境,您应该将它与其他文件,然后将该文件指定为/DEF选项。
相关文章:
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 将文本文件读取到2D数组中,但数组开始为超过数组[39][]的任何内容输出胡言乱语
- Arduino 到 C++ 串行读取胡言乱语
- Arduino esp8266中的c++函数修改了c文件中生成的浮点值,在c++函数退出后,c文件中会出现胡言乱语
- 在俄语本地化的Visual Studio中构建时,编译器警告是胡言乱语
- C++返回胡言乱语的类变量
- 指向存储胡言乱语的新内存的C++指针
- gdb用CJK显示胡言乱语
- 用constchar*初始化std::string会导致胡言乱语
- 有个胡言乱语的翻译帮忙
- 带有%s和std::string的sprintf会发出胡言乱语
- boost asio-ssl async_write给我发了很多胡言乱语
- 如何从构建的DLL中获得清晰的导出函数名?我总是听到原创的名字+胡言乱语