2012-02-20 46 views
0

我已經使用ATL創建了一個COM dll。當我嘗試在非託管C++中使用它時,我發現我得到了一個緩衝區溢出。我目前正在使用一個名爲OnInitIDA()的簡單方法進行測試,並且我所做的所有工作都是一個cout語句並返回。當我運行這個時,返回的HRESULT將是0,但它不會輸出我預期的行。通過使用該步驟並進入調試器的功能,我發現在調用時不是爲OnInitIDA輸入代碼,而是實際上進入了另一種名爲GetInclusionList的方法。一旦我在這個方法中放置了一個語句,並在應用程序運行時,這行就被打印出來了。有沒有人有任何想法爲什麼會調用錯誤的方法?在ATL COM dll中調用錯誤的方法

如果它可以幫助我的代碼已經被張貼在這裏:https://docs.google.com/open?id=0B3ehFEncKJH7ZDgxMGI1YjgtZTE2MS00ZTBkLWI2NzgtYzVhZjUxOWEzZGI0

回答

0

我找到了我的問題的答案。基本上,當我創建我的dll項目時,它繼承自IDispatch,但是我在測試應用程序中使用的接口預計它將繼承自IUnknown。這意味着接口不匹配,IDispatch繼承自IUnknown並添加了許多方法。改變這些以匹配dll的工作。

0

這聽起來因爲建立你的客戶喜歡你已經改變了你的界面。

清理和重建所有項目將是一個不錯的主意。