3

我有以下静态函数:

static inline HandVal
              StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n_cards )

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

谢谢,

麦克风

背景资料:

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

我以 DLL 的形式启动了一个 VS 项目并导入了原始源代码。该项目构建到一个 DLL 中,但没有导出任何函数(包括上面列出的函数)(源代码中没有 dllexport 以及 DLL Export Viewer 等工具都证实了这一点)。我试图按照这里的一般建议(在标题中创建一个可导出的包装函数)无济于事......函数似乎仍然没有被导出。

4

2 回答 2

9

您不能从 DLL 导出该函数。静态函数相当于该文件的私有函数。

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

于 2010-06-06T13:35:37.593 回答
1

通过使用静态内联定义函数,您可以有效地保证它只会出现在包含定义的模块中。

编辑每个文件以删除静态内联(可能会中断)或更改所有内容以使用 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);
}
于 2010-06-06T13:41:44.527 回答