2010-06-06 91 views
2

的出口,我有以下静态函数:DLL静态函数

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(在标题内创建一个可导出的包装函数)无效...函数仍然不会被导出。

回答

8

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

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

+0

已解决,谢谢。 – MikeRand 2010-06-06 14:00:24

1

通过定义静态内嵌你有效保障,这将是只包含定义模块的功能。

无论是编辑每个文件删除静态内联(这可能会破坏),或改变一切使用预处理指令,将让你有两种:

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