我如何从内置的DLL中获得清晰的-export函数名称?我总是得到原始名称+乱码

问题描述

| 注意:首先,我正在使用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/zh-cn/library/34c30xs1%28v=vs.80%29.aspx   / DEF选项传递一个   模块定义文件(.def)到   链接器。只能有一个.def文件   指定为LINK。有关的详细信息   .def文件,请参阅模块定义   文件。要在以下位置设置此链接器选项   Visual Studio开发   环境         打开项目的“属性页”对话框。有关详细信息,请参见   设置Visual C ++项目属性。   单击链接器文件夹。   单击输入属性页面。   修改模块定义文件属性。         要从内部指定.def文件   开发环境,你应该   将其与其他项目一起添加到项目中   文件,然后将文件指定给   / DEF选项。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...