使用跨套間的組件出現錯誤解决思路

使用跨套間的組件出現錯誤
小弟改了一個進程內服務器的組件,主線程為MTA,但是DL   組件的
ThreadingModel= " "   或   沒有   ,   因此呼叫   CoGetClassObject/
CoCreateIntance[Ex]COM會自動建立Main   STA(STA0),CoGetClassObject
調用得到的類場對象(proxy)沒問題,但是再調用類場的CreateIntance卻發生了   REGDB_E_IIDNOTREG   錯誤.   或是直接調用CoCreateIntance   是   E_NOINTERFACE   錯誤   ,   不知是哪個環節出了錯誤   .

http://support.microsoft.com/kb/150777/zh-tw  

上面這個網只有指出套間與對象使用關係   ,   而我上面的情況就是

用戶端   伺服器     結果
------   ------     -----------------------------------------------------
MTA         無             proxy存取;伺服器載入到STA0;如果必要STA0由COM自動建立

不知哪為大大能否說明上面這個模式的正確做法   ,   或是我漏了哪個步驟~~

代碼在此:   http://myweb.fcu.edu.tw/~d9147897/InProc.rar

主要是輸入2數到組件中再作相加並回傳到   client.   有問題步驟是卡在第2歨   ,    
若把主線程中的CoInitializeEx(NULL,COINIT_MULTITHREADED);改成
CoInitialize(NULL);   是沒問題的   ,   因為所產生的組件沒有   PROXY可以直接調用.


0.   先編譯   AddObj   產生DLL   再編譯   VCClient   執行.
1.   顯示   MTA   和   STA   線程   ID   ,   表示確實有2個套間存在   ,   MTA是由COM所建立
2.   CAddObj   的確有被創建   ,   但是呼叫   pFactory-> CreateInstance   或
      CoCreateInstance   所得到的   proxy   指針卻為   null   ,   問題就是在這.
3.   輸入   2數   並傳回結果

在此感激不進!!   靠大家了~~

------解决方案--------------------
可能需要向注册表中注册COM对象的PROXY/STUB, 不知是否注册了.

如果用的是ATL实现的COM对象

nmake -f XXXps.mak // 生成PROXY/STUB相关DLL

regsvr32 XXXps.dll // 将PROXY/STUB注册到注册表