我想从DLL导出一个函数:
extern "C" int __stdcall DoSomething(int &inputSize, int &outputSize);
它出口很好,名字很好。但是这个DLL中的所有其他函数也会导出 - 除了丑陋的名字。
我可以阻止它们导出吗?
我使用此工具查看导出的内容: http://www.nirsoft.net/utils/dll_export_viewer.html
答案 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")))