2010-06-06 144 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); 
}