2010-11-17 84 views
1

我有一個使用Visual Studio 6.0開發的進程外COM服務器可執行文件,它在過去的10年裏一直工作正常。現在我將此項目轉換爲Visual Studio 2010,並遇到GetInterfaceFromGlobal()的問題。GetInterfaceFromGlobal()調用失敗,Visual Studio 2010中的進程外COM服務器

我正在使用GIT來保存每個COM客戶端的IDispatch指針,以便我可以將他們的事件從進程外COM服務器發送給他們。調試後,我發現的原因是沒有。由m_vec.Getsize()返回的連接數是4而不是1.即使我只添加一個客戶端,數值也會變爲4.我檢查了ATLCOM.h,並在該文件中將_DEFAULT_VECTORLENGTH從1更改爲4最近的版本。

#ifndef _DEFAULT_VECTORLENGTH 
#define _DEFAULT_VECTORLENGTH 4 
#endif 

有關如何覆蓋此值的任何建議?我應該在我的代碼中重新定義這個值爲1嗎?這會有什麼副作用嗎?或者我錯過了什麼?

在此先感謝 哈里什

+0

爲什麼不使用STL向量? – Puppy 2010-11-17 12:20:30

回答

1

請勿觸摸不變 - 只是忽略的變化。 _DEFAULT_VECTORLENGTH控制CComDynamicUnkArray::Add()的工作方式,並且遍歷CComDynamicUnkArray對象的代碼應該跳過內部存儲的空指針。

事情是這樣的:

for(int i = 0; i < array.GetSize(); i++) { 
    IUnknown* pointer = array.GetAt(i); 
    if(pointer == 0) { 
     continue; 
    } 
    //proceed with the pointer 
} 

如果您決定更改該常量確保您靜態鏈接到ATL,並確保你改變,在ATL不變以及和重建ATL。否則,由於原因,您可能冒險運行到未定義的行爲described here

+0

謝謝,跳過空指針解決方案爲我工作 – Harish 2010-11-17 13:18:30

相關問題