2011-03-10 23 views
2

環境:VS2008,C++ ATL COM位,64位,Windows 7的ATL:無法刪除COM接口的方法 - 總是會再次出現像變魔術一樣

我試圖從舊的COM接口刪除的方法。我修改* .idl,修改關聯的* .h和* .cpp實現文件,並將其從主項目的.h文件中移除。我可以搜索整個項目的舊方法名稱 - 不顯示,並且編譯/鏈接正常。但是,如果我然後使用對象瀏覽器來查看編譯的DLL - dang方法仍然存在!如果我在.NET項目中'引用'該DLL - 顯示該方法。如果.NET代碼試圖使用該方法 - 它會得到一個內存異常(這是有道理的)。我不能爲我的生活弄清楚如何修改IDL,刪除方法代碼並使得到的編譯後的DLL正確。

這裏heck是潛伏的方法,並有一種不同的方法從現有的ATL生成的COM接口中刪除一個方法?我很難過!謝謝!

回答

3

你註銷了舊的DLL模塊並註冊了新的DLL模塊嗎?聽起來就像你的註冊表可能有不一致的條目。

還要確保沒有預編譯的頭文件等等,這樣當你編譯你確定它沒有包含一些舊的副本。

可能最好的方法是在編譯之前刪除完整的構建目錄(調試/發佈),以防萬一您錯過刪除一些舊文件。

還檢查加載.dll的路徑,可以看到在對象瀏覽器中,將其與註冊表項進行比較。也許你之前做過32位版本?

+1

VS2008鏈接後重新註冊DLL。如果我使用對象瀏覽器查看剛剛編譯的DLL,則顯示我刪除的方法。我想我會刪除調試/發佈目錄,看看會發生什麼。 – Dale 2011-03-10 13:22:00