2011-07-27 89 views
1

我想在Mac OS X 10.6上編譯一個簡單的DLL,並且對正確聲稱DLL提供給世界使用的函數的方法感到困惑。以下從可靠的來源示例代碼,我想出了:在Mac OSX上導出DLL函數的正確方法

__declspsec(dllexport) pascal int ReturnTheNumberFive(void) 

但它GCC barfs。示例代碼實際上是MACPASCAL和DLLExport,我認爲它們是宏。我仔細查看了#define的示例代碼,SDK等,並插入了我發現的內容。這些定義本可以埋在#ifs裏面,所以我發現它並不好,不真實。不合邏輯的是,如果我只是做明顯的並使用DLLExport和MACPASCAL,編譯器也會發出警告,所以這是無法解決的。

使應用程序可以使用DLL的函數的正確方法是什麼?

+2

在Mac上,一個 'DLL' 不叫DLL;該文件本身被稱爲'.dylib',並且通常嵌入在'.framework'中。這不僅僅是對術語的挑剔......我猜想沒有社區中常用的詞語,對於信息來說,Google很難!所以,從現在起請使用'dylib'和'framework'這個詞。 – Yuji

+0

我們這些突然發現自己處於Mac編程世界的人是一個真正解釋所有這些新手指南。現在,它是一些零碎的東西,比如你的評論。 – DarenW

回答

5

默認情況下,所有符號都在.dylib中可見。有沒有調用約定的變化(如Pascal調用約定)

因此,簡而言之:

int ReturnTheNunmberFive(void) { return 6; }

+0

DLLExport和MACPASCAL顯然是爲了便攜到其他平臺。作爲蘋果之國的外國人,我無法找到任何解釋,認爲這些都是虛無的。好吧,現在我知道了! – DarenW