【问题标题】:How can I block a function in a DLL from exporting?如何阻止 DLL 中的函数导出?
【发布时间】:2016-01-07 22:58:45
【问题描述】:

我只想从 DLL 中导出一个函数:

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

它以一个好听的名字出口。但是这个 DLL 中的所有其他函数也会导出——除了难看的名字。

我可以阻止它们导出吗?

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

【问题讨论】:

    标签: c++ dll


    【解决方案1】:

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

    ;     @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 会自动完成。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我这里有很多函数,所以用 attribute 标记每个函数是一件很痛苦的事情。所以我用我的 MinGW 尝试了这个 -fvisibility=hidden 但它没有做任何事情。
      猜你喜欢
      • 2013-03-01
      • 1970-01-01
      • 2010-10-25
      • 2012-01-24
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多