面向 COM 初學者,演示使用 ATL 向導創建進程內 COM 服務器(DLL),實現簡單雙接口對象,並在 VC++ / VB 客戶端調用。不深入 IDL/COM 理論,重工程步驟。
Simple_ATL,路徑:E:\Samples\Simple_ATL。
圖一

圖二

圖三

圖四
First_ATL(其它自動填充)。Apartment(單元模型,默認)。Dual(雙接口,支持 IDispatch 晚綁定,適合 VB/腳本調用)。No(不支持聚合)。
圖五
IFirst_ATL,右鍵 → Add Method。
圖六
HRESULT(默認,灰色不可改)。AddNumbers。[in] long a, [in] long b, [out, retval] long* pResult。
圖七
打開 First_ATL.cpp,定位 CFirst_ATL::AddNumbers:
// Client.cpp
#import "..\Simple_ATL\Debug\Simple_ATL.tlb" no_namespace
int main()
{
CoInitialize(NULL);
IFirst_ATLPtr pObj(__uuidof(First_ATL)); // 智能指針自動管理引用計數
long result;
pObj->AddNumbers(10, 20, &result);
printf("10 + 20 = %d\n", result); // 輸出 30
CoUninitialize();
return 0;
}
關鍵點總結
IDispatch + 自定義 vtable)同時支持早/晚綁定。CoInitialize)。HRESULT,使用 _com_error 或 SUCCEEDED/FAILED 宏。