一、為什么需要dll
代碼復用是提高軟件開發 效率的重要途徑。一般而言,只要某部分代碼具有通用性,就可將它構造成相對獨立的功能模塊並在之后的項目中重復使用。比較常見的例子是各種應用程序框架, 如ATL、MFC等,它們都以源代碼的形式發布。由於這種復用是“源碼級別”的,源代碼完全暴露給了程序員,因而稱之為“白盒復用”。“白盒復用”的缺點 比較多,總結起來有4點。
- 暴露了源代碼;
- 容易與程序員的“普通”代碼發生命名沖突;
- 多份拷貝,造成存儲浪費;
- 更新功能模塊比較困難。
實際上,以上4點概括起來就是“暴露的源代碼”造成“代碼嚴重耦合”。為了彌補這些不足,就提出了“二進制級別”的代碼復用。使用二進制級別的代碼復用一定程度上隱藏了源代碼,對於緩解代碼耦合現象起到了一定的作用。這樣的復用被稱為“黑盒復用”。
在Windows操作系 統中有兩種可執行文件,其后綴名分別為.exe和.dll。它們的區別在於,.exe文件可被獨立的裝載於內存中運行;.dll文件卻不能,它只能被其它 進程調用。然而無論什么格式,它們都是二進制文件。上面說到的“二進制級別”的代碼復用,可以使用.dll來實現。
與白盒復用相 比,.dll很大程度上彌補了上述4大缺陷。.dll是二進制文件,因此隱藏了源代碼;如果采用“顯式調用”(后邊將會提到),一般不會發生命名沖突;由 於.dll是動態鏈接到應用程序中去的,它並不會在鏈接生成程序時被原原本本拷貝進去;.dll文件相對獨立的存在,因此更新功能模塊是可行的。
說明:實現“黑盒復用”的途徑不只dll一種,靜態鏈接庫甚至更高級的COM組件都是。
1、創建新C#控制台應用程序,項目命名createBll,打開Program.cs重命名為TestA(可以不重命名)並修改代碼,如圖:

