CodeFx(代號 All-In-One Code Framework)是微軟 CodePlex 上的明星專案,彙整幾乎所有主流微軟開發技術的完整範例,並以多種語言實現同一功能。無論是初學者入門,還是資深開發者尋找現成模板,皆能大幅節省開發時間。
框架結構清晰,主要模組包含:
框架中 ActiveX 範例完整示範了授權機制的實作細節,這是企業級控制項部署的關鍵:
BEGIN_OLEFACTORY(CMFCActiveXCtrl)
virtual BOOL VerifyUserLicense();
virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMFCActiveXCtrl)
static const TCHAR BASED_CODE _szLicFileName[] = _T("License.lic");
static const WCHAR BASED_CODE _szLicString[] = L"Copyright (c) 2000 ";
BOOL CMFCActiveXCtrl::CMFCActiveXCtrlFactory::VerifyUserLicense() {
return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName, _szLicString);
}
BOOL CMFCActiveXCtrl::CMFCActiveXCtrlFactory::GetLicenseKey(DWORD dwReserved, BSTR FAR* pbstrKey) {
if (pbstrKey == NULL) return FALSE;
*pbstrKey = SysAllocString(_szLicString);
return (*pbstrKey != NULL);
}
關鍵提醒:修改 _szLicString 時,必須同步更新 .LIC 檔案第一行,否則授權驗證失效。
[ uuid(E389AD6C-4FB6-47AF-B03A-A5A5C6B2B820), licensed,
helpstring("MFCActiveX Control"), control ]
coclass MFCActiveX
框架封裝了 AutoWrap 函數,以變參方式統一處理 IDispatch::Invoke 細節,支援屬性讀寫、方法呼叫,極大降低 COM 程式碼複雜度:
HRESULT AutoWrap(int autoType, VARIANT* pvResult, IDispatch* pDisp,
LPOLESTR ptName, int cArgs) {
// ... 參數封裝、GetIDsOfNames、Invoke 呼叫、錯誤處理 ...
}
使用 <Delayimp.h> 實現 DLL 延遲載入,避免啟動時不必要的依賴載入開銷:
// 卸載延遲載入的 DLL
PCSTR pszDll = "CppDllExport.dll";
_tprintf(_T("__FUnloadDelayLoadedDLL2 => %d\n"),
__FUnloadDelayLoadedDLL2(pszDll));
CodeFx 不僅是範例庫,更是微軟技術棧的「百科全書」。建議開發者: