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

时间:2012-02-20 06:02:40

标签: c++ visual-c++ dll com atl

我使用ATL创建了一个COM dll。当我尝试在非托管C ++中使用它时,我发现我得到了缓冲区溢出。我目前正在使用一个名为OnInitIDA()的简单方法进行测试,我在其中所做的只是一个cout语句并返回。当我运行它时,返回的HRESULT将为0但是它不会输出我预期的行。通过使用步骤并逐步调试调试器的功能,我发现在调用时不是输入OnInitIDA的代码,而是实际进入另一个名为GetInclusionList的方法。一旦我在此方法中放置了一个语句,并且当应用程序运行时,该行被打印掉。有谁知道为什么会调用错误的方法?

如果它有助于我的代码发布在此处:https://docs.google.com/open?id=0B3ehFEncKJH7ZDgxMGI1YjgtZTE2MS00ZTBkLWI2NzgtYzVhZjUxOWEzZGI0

2 个答案:

答案 0 :(得分:0)

这听起来就像你在建立客户端后改变了界面。

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

答案 1 :(得分:0)

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