2009-02-19 103 views
3

在Windows世界中,一個好東西的正確名稱是什麼。帶導出函數的老式C++ DLL?不是COM DLL,不是.NET DLL。我們通過調用LoadLibrary()和GetProcAddress()來調用的那種DLL?非COM,非.NET DLL的正確名稱?

我一直稱它們爲「扁平DLL」,因爲調用者不能從DLL實例化對象,但是什麼是正確的名稱?

編輯

感謝您的回答。

只是「DLL」在技術上可能是正確的,但我工作的地方每個人都假設「DLL」意味着COM,或者可能在推送.NET,所以我需要一個術語來區分我的意思。

回答

2

「本機」可能是最常見的術語,雖然「窗口」或「控制檯」在技術上更爲正確,因爲這些子系統可能會被使用(「本機」子系統是不同的)。我也聽說過使用「C DLL」,這意味着您使用「扁平化DLL」 。

動態鏈接庫是一個通用的概念 - 「Windows動態鏈接庫「與* nix的等價物以及託管庫不同。

在這種情況下,COM只是一個封裝約定 - Windows DLL可以包含COM服務器,就像可移植可執行文件(PE)一樣。

4

A .dll?所有其他的東西都使用.dll提供的基本功能來完成各自的功能。如果你想成爲迂腐的,也許是一個原始的.dll,但.dll應該沒問題。

0

我總是把它們稱爲DLL,但我沒有停留在C++/VB6世界太久。

1

可能是「常規DLL」。這是我們使用的術語,但'DLL'也適用。

3

沒有「正確的」名稱了,「普通汽車」有一個「正確的」名稱。 (我使用「普通的DLL」

COM DLLs,OCXs,.NET DLLs ......它們都是DLLs,它們還有附加功能,沒有什麼能阻止你擁有一個可以被訪問的DLL通過COM或手動LoadLibrary/GetProcAdress。我已經看到它,甚至可以通過一個「普通的」非客體化的API暴露相同的對象

2

我和查爾斯格雷厄姆在一起。它們只是DLL。沒有更多,沒有更多。

某些DLL公開允許它們與某些編程模式一起使用的API(例如,公開DllGetClassObject和DllCanUnloadNow的DLL可用於託管COM對象(但還有其他COM對象可以託管的方式))。

1

這是一個「動態鏈接庫」。有時被稱爲「dynalink圖書館」。與「靜態鏈接庫」相反,你選擇自己的毒藥。相反,您需要在執行路徑上的某處隨機安裝毒藥。

+0

美麗的說法就是這樣! – 2009-09-14 09:43:48

0

我同意有必要使用術語來描述不能作爲託管代碼執行的DLL(換言之,託管代碼需要互操作),並且不能用作COM對象。很多時候,開發人員只是說DLL,這是不明確的。是的,將一個.Net類庫調用一個DLL並將一個COM進程內服務器調用一個DLL是完全有效的,但出於傳遞它的目的,僅僅說出DLL是不明確的。

查看我的文章Native Windows Dynamic Link Libraries (DLLs)瞭解更多信息。