Windows 程式設計/C 和 Win32 API
Windows 中的許多底層函式都是使用 C 程式語言建立的。與 VB 程式碼甚至 C++ 程式碼相比,C 程式碼通常更小更快,並且與原始彙編程式碼相比,開發時間更短。Win32 API 中的所有 DLL 以及大多數核心級結構都是用 C 程式碼實現的。
Visual Basic 本質上是一種“僅限 Windows”的程式語言——儘管一些移植版本存在或正在開發中用於其他系統,但 VB 在其他作業系統上的普及程度遠不如 Windows。VB 執行時庫利用 Win32 API 和 MFC 庫來實現其功能。新版本的 VB,“VB.NET”,使用 .NET 平臺,因此不會在本華夏公益教科書中介紹。舊版本的 VB 或“VB Classic”利用與 C 和 C++ 相同的 Win32 API 和 MFC 介面來與 Windows 通訊。但是,並非所有函式都相同,因為 VB 使用不同的資料型別,並且儲存資料的方式不同於 C 或 C++。在我們討論 Win32 API 和 MFC 時,我們將嘗試展示如何在 VB 中實現相同的功能。
Visual Basic 使用 STDCALL 呼叫約定來實現函式呼叫。大多數 Win32 API 也使用 STDCALL 呼叫約定,因此編譯器完成了大部分介面這兩個約定所需的繁重工作。另一方面,C 和 C++ 預設情況下不使用 STDCALL,如果您想手動將 VB 物件程式碼檔案與 C 物件程式碼檔案連結,則需要明確將 C 介面設為 STDCALL 介面。
Microsoft 為 Windows 實現了一種稱為元件物件模型的技術。COM 本質上將面向物件程式設計正規化提升到了一個新的高度,透過標準化類介面,並允許用不同語言(C++、VB 等)編寫類,並無縫地相互連線。COM 程式(或“COM 客戶端”)可以用大多數允許面向物件的語言編寫。更準確地說,COM 的唯一語言要求是程式碼是用能夠建立指標結構的語言生成的,並且可以顯式或隱式地透過指標呼叫函式。
許多其他程式語言已在 Windows 系統上實現,並且其中許多都具有某種方法來連線 Win32 API 或 MFC 庫。這些介面統稱為包裝器,因為它們將 Win32 API 的功能包裝在另一種程式語言中。Perl、Ada、Python、PHP、AutoIT 等都提供了通用的包裝器。