如何阻止DLL中的函数导出?
How can I block a function in a DLL from exporting?
我想从DLL中导出一个函数:
extern "C" int __stdcall DoSomething(int &inputSize, int &outputSize);
它输出很好,有一个好名字。但是,这个DLL中的所有其他函数也可以导出—除了具有难看的名称。
我可以阻止它们导出吗?
我使用这个工具来查看导出的内容:http://www.nirsoft.net/utils/dll_export_viewer.html
使用定义文件。这是创建它的确切用例。
; @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
指向链接器标志。
您感兴趣的是符号的可见性。在gcc和clang中,默认情况下导出所有符号。您可以使用-fvisibility=hidden
作为命令开关。
gcc还有一些属性可以用来设置特定符号的可见性:
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
#define DLL_LOCAL __attribute__ ((visibility ("hidden")))
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 默认析构函数在互斥锁上被阻止
- 阻止我的项目调用__CxxFrameHandler3(CRT函数)
- "virtual"对C++析构函数有何影响?
- 自定义 LowLevelMouseProc 回调函数不阻止输入
- 休眠函数,但不阻止其他函数和代码
- C++ 友元函数在内存位置上有何不同?
- 哪个查找规则阻止编译器查找函数
- 为什么删除成员变量的复制构造函数不会阻止默认的复制构造函数
- 为什么具有私有构造函数的类不阻止从此类继承?如何控制哪些类可以从某个基继承?
- 当函数调用时,试图阻止数组更改时发生无效转换错误
- 指向成员函数的指针与指向数据成员的指针有何不同
- 如果参数条件为 true,则阻止执行返回函数
- 为什么私有构造函数阻止对象创建C++
- 基类析构函数是否阻止生成移动构造函数
- 默认的虚拟析构函数是否阻止编译器生成的移动操作
- 使用复杂的显示函数会阻止glutKeyboardFunc工作
- 在 stl 映射中查找在编写自定义比较函数时不起作用,该函数会阻止键排序