DLL导出静态函数

时间:2010-06-06 13:28:14

标签: dll static dllexport

我有以下静态功能:

static inline HandVal
              StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n_cards )

我可以在DLL中导出此功能吗?如果是这样,怎么样?

谢谢,

麦克

背景资料:

我这样做是因为原始源代码带有一个VS项目,旨在编译为静态(.lib)库。为了使用ctypes / Python,我将项目转换为DLL。

我作为DLL启动了VS项目并导入了原始源代码。该项目构建为DLL,但没有导出任何函数(包括上面列出的函数)(由源代码中缺少dllexport和DLL Export Viewer等工具确认)。我试图遵循一般建议here(在标题中创建一个可导出的包装函数)无济于事......函数似乎仍然没有被导出。

2 个答案:

答案 0 :(得分:9)

您可能无法从DLL导出该函数。静态函数等效于该文件的私有函数。

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

答案 1 :(得分:1)

通过使用 static inline 定义一个函数,您可以有效地保证它只会出现在包含该定义的模块中。

编辑每个文件以删除静态内联(可能会中断)或更改所有内容以使用PreProcessor指令,该指令允许您拥有:

#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);
}