如何阻止DLL中的函数导出?

时间:2015-10-09 21:51:27

标签: c++ dll

我想从DLL导出一个函数:

extern "C" int __stdcall DoSomething(int &inputSize, int &outputSize);

它出口很好,名字很好。但是这个DLL中的所有其他函数也会导出 - 除了丑陋的名字。

我可以阻止它们导出吗?

我使用此工具查看导出的内容: http://www.nirsoft.net/utils/dll_export_viewer.html

2 个答案:

答案 0 :(得分:3)

使用定义文件。这是它的创建用例。

;     @Author : Brandon.
;
;     @param  : MyDLL Definition File.
;     @param  : Another Description.


LIBRARY MyDLL
DESCRIPTION "MyDLL Definition File"
EXPORTS

DoSomething;

另存为MyDLL.def

现在它将导出函数调用“DoSomething”。

要与Mingw / Codeblocks一起使用,您必须添加:

-Wl,--enable-stdcall-fixup -Wl,--kill-at -d --input-def src/MyDLL.def

到链接器标志。 Visual Studio会自动执行此操作。

答案 1 :(得分:1)

您感兴趣的是符号的可见性。在gcc和clang中,默认情况下会导出所有符号。您可以使用-fvisibility=hidden作为命令切换。

gcc还具有可用于设置特定符号可见性的属性:

#define DLL_PUBLIC __attribute__ ((visibility ("default")))
#define DLL_LOCAL  __attribute__ ((visibility ("hidden")))