【问题标题】:Export a function within its namespace?在其命名空间中导出函数?
【发布时间】:2015-03-17 21:11:35
【问题描述】:

从我所阅读和尝试的内容来看,我相当肯定这是不可能的。虽然为了代码的方便和连续性,我想在这里问一下。

是否可以将函数连同其命名空间容器一起导出?

例如:

namespace Continuity
{
    int Foo(void);
}

标准用法是:Continuity::Foo();

我希望能够导出此函数以在 DLL 中使用,但我希望将其保留在命名空间结构中,以便在 DLL 中使用相同的用法。

【问题讨论】:

    标签: c++ function dll namespaces export


    【解决方案1】:

    你问:

    是否可以将函数连同其命名空间容器示例一起导出:

    是的,有可能。

    用途:

    namespace Continuity
    {
       DLL_EXPORT int Foo(void);
    }
    

    DLL_EXPORT#defined 到 __declspec(dllexport)__declspec(dllimport) 的适当位置。

    在您构建 DLL 的项目中,您需要:

    #define DLL_EXPORT __declspec(dllexport)
    

    在您使用 DLL 的项目中,您需要:

    #define DLL_EXPORT __declspec(dllimport)
    

    【讨论】:

    • 这已经很老了,所以我希望你能回答。命名空间是否会以任何方式影响 dll 的调用?如果没有,我可以摆脱它,如果我的项目中没有副作用。
    • dll的调用是什么意思?
    • 如果我调用像 _AddFunc = (AddFunc)GetProcAddress(hInstLibrary, "Add"); 这样的 dll 函数,命名空间会出现在这里的任何地方还是只是“死”了?
    • @MaestroGlanz,我对此没有任何经验。但是,通过 SO 搜索会导致很多问题和答案。 stackoverflow.com/….
    【解决方案2】:

    确保在声明函数时不要使用 extern "C",否则命名空间不会用于链接函数。然后,您可能在 2 个不同的命名空间中拥有 2 个具有相同函数的 dll,但根据加载函数的顺序,只会随机调用一个函数。

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2020-07-25
      • 2016-11-05
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多