我有以下静态功能:
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(在标题中创建一个可导出的包装函数)无济于事......函数似乎仍然没有被导出。
答案 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);
}