ATL COM dll中调用了错误的方法

Wrong method called in ATL COM dll

本文关键字:错误 方法 调用 COM dll ATL      更新时间:2023-10-16

我已经使用ATL创建了一个COM dll。当我尝试在非托管C++中使用它时,我发现缓冲区溢出。我目前正在使用一个名为OnInitIDA()的简单方法进行测试,我在其中所做的只是一个cout语句和返回。当我运行此程序时,返回的HRESULT将为0,但它不会输出我期望的行。通过使用调试器的逐步进入函数,我发现在调用OnInitIDA时,它实际上进入了另一个名为GetInclusionList的方法,而不是输入OnInitiIDA的代码。一旦我在这个方法中放置了一条语句,当应用程序运行时,这一行就被打印出来了。有人知道为什么会调用错误的方法吗?

如果有帮助的话,我的代码已经发布在这里:https://docs.google.com/open?id=0B3ehFEncKJH7ZDgxMGI1YjgtZTE2MS00ZTBkLWI2NzgtYzVhZjUxOWEzZGI0

这听起来像是在构建客户端后更改了界面。

清理并重建所有项目是个好主意。

我找到了问题的答案。基本上,当我创建dll项目时,它继承自IDispatch,但我在测试应用程序中使用的接口希望它继承自IUnknown。这意味着接口不匹配,IDispatch继承了IUnknown并添加了许多方法。更改更改这些以匹配dll工作。