2012-02-20 47 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

这听起来因为建立你的客户喜欢你已经改变了你的界面。

清理和重建所有项目将是一个不错的主意。