代码之家  ›  专栏  ›  技术社区  ›  MikeRand

静态函数的dll导出

  •  3
  • MikeRand  · 技术社区  · 15 年前

    我有以下静态功能:

    static inline HandVal
                  StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n_cards )
    

    我可以在DLL中导出这个函数吗?如果是这样,怎么办?

    谢谢,

    迈克

    背景信息:

    我这样做是因为原始源代码附带了一个设计为编译为静态(.lib)库的vs项目。为了使用ctypes/python,我将把项目转换为一个dll。

    我启动了一个作为dll的vs项目,并导入了原始源代码。项目内置到一个dll中,但没有导出任何函数(包括上面列出的函数),这是由源代码中缺少dll export和dll export viewer等工具确认的。我试着听从一般的建议 here (在头中创建一个可导出的包装函数)不可用…函数似乎仍不导出。

    2 回复  |  直到 15 年前
        1
  •  9
  •   Romain Hippeau    15 年前

    不能从DLL导出该函数。静态函数等价于该文件的私有函数。

    您可以在文件中创建调用它的方法并导出它。

        2
  •  1
  •   Richard Harrison    15 年前

    通过定义函数 静止的 内联的 您可以有效地保证它只存在于包含定义的模块中。

    编辑每个文件以删除静态内联(可能会中断),或者更改所有内容以使用预处理器指令,该指令允许您具有以下任一项:

    #define MYAPI static inline
    

    #define MYAPI __declspec(dllexport)
    

    然后

    MYAPI HandVal StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n_cards )
    

    或者将一组包装器作为一个单独的模块进行构建,

    __declspec(dllexport) HandVal Public_StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n_cards )
    {
         return StdDeck_StdRules_EVAL_N(cards, n_cards);
    }