1. 程式人生 > >記錄一個錯誤:COM程序外伺服器的啟動

記錄一個錯誤:COM程序外伺服器的啟動

在完成所有的程序外原始碼編輯後,生成了相應的.exe檔案。根據書上說“COM解決的辦法是維護一個被登記的類廠的內部表格,根據客戶請求的CLISD得到相應的類廠。若找不到相應類廠,COM將在登錄檔中查詢並啟動相應的EXE,此EXE可呼叫COM函式CoRegisterClassObject完成類廠的登記,以便COM能找到它們。”應該是客戶端根據登錄檔自動啟動.exe元件伺服器,在我實際操作過程中始終如法達到這一點,只能是先啟動伺服器。

後來才發現是複用了註冊檔案register.cpp, 沒有修改關於地址值鍵值的名稱。書上原話是——本地伺服器將把相應的EXE檔案的位置登記在關鍵字LocalServer32下而不是InProcServer下。

相應的程式碼修改為: #ifdef OUTPROC_SERVER setKeyAndValue(szKey, “LocalServer32”, szModule) ; #else setKeyAndValue(szKey, “InprocServer32”, szModule) ; #endif

之後可以檢視登錄檔,地址在LocalServer32下,客戶端啟動COM元件正常。

切記:複用程式碼時不同點的修改。