2011-03-20 103 views
0

我有一個dll至極DLL使用我想在c程序使用,在C源代碼

  • 你認爲是有效的有一個DLL(很多常用功能),然後創建一個最終會使用它們的程序,或者擁有所有的源代碼。

  • 要包含dll,必須遵循什麼語法?

回答

3

你認爲是有效的有一個DLL(很多常用功能),然後創建一個程序,最終將使用它們,或者有所有源代碼。

對於內存和磁盤空間,這是更有效地使用一個共享庫(DLL中是Windows實現共享庫)中,假設至少兩個程序使用該組件。如果只有一個程序會使用這個組件,那麼就不會節省內存或磁盤空間。

共享庫可能比靜態鏈接代碼稍慢;然而,這可能是非常小的,而共享庫帶來了許多好處,使得它更有價值(例如動態加載和處理符號的能力,這允許插件式體系結構)。也就是說,也有一些缺點(如果你不小心你的DLL的存在位置,它們是如何版本化的以及誰可以更新它們,那麼你可以進入DLL hell)。

要包括dll,必須遵循什麼語法?

這取決於。共享庫有兩種使用方式。在第一種方式中,你告訴鏈接器引用共享庫,共享庫將在程序啓動時自動加載,並且基本上像普通引用代碼一樣(包括各種頭文件,並且在使用時使用符號名稱你想參考它)。第二種方法是動態加載共享庫(在Windows上,這是通過LoadLibrary完成的,而在UNIX上完成則是dlopen)。第二種方式可以根據共享庫中是否存在符號來改變程序的行爲,並檢查可用的符號集。對於第二種方法,您可以使用GetProcAddress(Windows)或dlsym(UNIX)來獲得指向庫中定義的函數的指針,並且可以傳遞函數指針以引用加載的函數。

0

你可以把你的功能集成到其中任何一個在編譯時合併到您的應用程序,是基本相同,把.c文件在項目中的靜態庫(.LIB一)。

或者你可以在運行時使用包含函數的dll。 dll的優點是兩個使用相同函數的程序可以使用相同的dll(節省磁盤空間),並且可以在不更改程序的情況下升級dll - 這些對您而言可能都不重要。

程序的運行沒有什麼特別的,你需要做的,包括它的時候DLL被自動加載(你可以加載一個dll特別是在你的代碼 - 有時有特殊原因要做到這一點)

編輯 - 如果你需要創建一個存根lib中現有的DLL看到http://support.microsoft.com/kb/131313

+0

你會如何從c代碼中調用它? – cMinor 2011-03-20 04:25:19

+0

現在我正在使用dev shed c/C++,你知道一個示例代碼嗎? – cMinor 2011-03-20 04:26:24

+0

@darkcminor,你可以像通常那樣稱呼它。您在聲明中包含「.h」文件,然後您只需使用該函數。您需要更改項目配置以鏈接到DLL。 – 2011-03-20 04:27:07