【问题标题】:How to block a function from being exported in MS VS C++?如何阻止函数在 MS VS C++ 中导出?
【发布时间】:2011-11-16 16:56:40
【问题描述】:

因此,为了论证,我有一个名为 ExportedFunctions.cpp 的模块,其中有几个用 DLL_EXPORT 修饰的函数(见下文)

#define DLL_EXPORT __declspec(dllexport)

ExportedFuncitons.cpp 包含一个 LibraryFunctions.h。该标头中声明的函数在 LibraryFunctions.lib 中实现并静态链接到我的项目。

问题是,当我编译我的 DLL 并使用依赖项遍历器 (depends.exe) 查看它时,我不仅可以看到 ExportedFunctions.cpp 导出的函数,还可以看到 LibraryFunctions.h 中的所有函数。

即使我从 LibraryFunctions.h 中删除一些函数声明也是如此。它们一直显示为 DLL 入口点。我想隐藏它们。

【问题讨论】:

  • 您是否尝试过使用命名空间 { }(即匿名命名空间)?虽然函数可能仍会被导出,但将无法调用它们,因为范围解析永远不会成功。
  • 您是否有可能在调试模式下构建库和/或 Dependency Walker 正在拾取调试符号,这将允许它显示所有功能(无论是否导出) ?

标签: c++ windows visual-studio-2010 dll


【解决方案1】:

想通了。

问题是 lib 文件正在导出函数。无论 .h 文件在说什么,它看起来都会导出。

幸运的是,我也是 LibraryFunctions 的所有者,所以我使用“Release - Static Lib”重新编译了它。在该配置中,我阻止了 dllexport 指令。

【讨论】:

    猜你喜欢
    • 2016-01-07
    • 2013-03-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多