想將自製工具 (如專案分析器) 嵌入 VC6 IDE,需開發實作 IDSAddIn 介面的 COM 增益集。本文以 CodeAnalyser 專案為例,完整記錄從精靈建立到功能實作的全過程。
CodeAnalyser。

專案定義 ICommands 介面 (在 CodeAnalyser.odl),衍生 CCommands 實作所有使用者命令、VC 應用程式訊息回應、偵錯事件回應。
interface ICommands : IDispatch
{
[id(1)] HRESULT GetCurDirCommandMethod(); // 取得 VC 目前工作目錄
[id(2)] HRESULT QuitCommandMethod(); // 退出 VC 編輯器
};
// CCommands 宣告
STDMETHOD(GetCurDirCommandMethod)(THIS);
STDMETHOD(QuitCommandMethod)(THIS);
// 實作
STDMETHODIMP CCommands::GetCurDirCommandMethod()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE));
BSTR bstrCurDir;
m_pApplication->get_CurrentDirectory(&bstrCurDir);
CString str(bstrCurDir);
::MessageBox(NULL, str, "VC工作目錄", MB_OK | MB_ICONINFORMATION);
VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE));
return S_OK;
}
STDMETHODIMP CCommands::QuitCommandMethod()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE));
if (::MessageBox(NULL, "您想退出 VC++ 編輯器嗎(Y/N)?", "詢問", MB_YESNO|MB_ICONQUESTION) == IDYES)
m_pApplication->Quit();
VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE));
return S_OK;
}
CDSAddIn 類別中:
AddCommand 註冊命令 (對應 ICommands 方法)、用 AddCommandBarButton 加入按鈕並關聯命令名稱。LPCTSTR szCommand = _T("GetCurDirCommand");
VARIANT_BOOL bRet;
CString strCmdString; strCmdString.LoadString(IDS_CMD_STRING);
strCmdString = szCommand + strCmdString;
CComBSTR bszCmdString(strCmdString);
CComBSTR bszMethod(_T("GetCurDirCommandMethod"));
CComBSTR bszCmdName(szCommand); // 與按鈕關聯
VERIFY_OK(pApplication->AddCommand(bszCmdString, bszMethod, 0, dwCookie, &bRet));
if (bFirstTime == VARIANT_TRUE)
VERIFY_OK(pApplication->AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie));

增益集開發讓您擁抱 IDE。本範例展示最核心流程:介面定義、命令實作、工具列建立、安裝部署。歡迎開發者擴充更多實用功能 (如專案統計、程式碼產生等)。