首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 內部 COM 增益集開發實戰:嵌入 Visual C++ 6.0 IDE

     編輯:關於VC++

前言

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

增益集專案建立步驟

  1. AppWizard → DevStudio Add-in Wizard,專案名 CodeAnalyser。

    增益集精靈步驟 2

  2. 輸入增益集名稱、描述,勾選「產生工具列」、「自動加入 VC 事件回應代碼」。
  3. 完成精靈,進入程式碼編輯。

核心架構:ICommands 介面與 CCommands 類別

專案定義 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;
}

工具列建立與按鈕連接 — OnConnection / OnDisconnection

CDSAddIn 類別中:

  • OnConnection:初始化 COM、建立工具列、用 AddCommand 註冊命令 (對應 ICommands 方法)、用 AddCommandBarButton 加入按鈕並關聯命令名稱。
  • OnDisconnection:銷毀工具列、釋放資源、卸載 COM。
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));

編譯、註冊與安裝

  1. Build 專案,Debug 目錄產生 DLL。
  2. VC6 → 工具列右鍵 → Customize → Add-ins and Macro Files → Browse 選擇 DLL (檔案類型改 *.dll)。
  3. 勾選增益集,關閉。工具列自動出現,可在 Toolbars 頁重新命名工具列。

Customize 對話框 Add-ins 頁面 Browse DLL 工具列重新命名

結語

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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved