C++ 在ATL COM dll中调用了错误的方法
我已经使用ATL创建了一个COM dll。当我试图在非托管C++中使用它时,我发现我得到了一个缓冲区溢出。我目前正在使用一个名为OnInitIDA的简单方法进行测试,我在其中所做的只是cout语句和返回。当我运行此命令时,HRESULT返回的值将为0,但它不会输出我期望的行。通过使用调试器的step over和step into函数,我发现调用OnInitIDA时没有输入代码,而是进入了另一个名为GetInclusionList的方法。一旦我在这个方法中放置了一条语句,当应用程序运行时,这一行就被打印出来了。有人知道为什么会调用错误的方法吗C++ 在ATL COM dll中调用了错误的方法,c++,visual-c++,dll,com,atl,C++,Visual C++,Dll,Com,Atl,我已经使用ATL创建了一个COM dll。当我试图在非托管C++中使用它时,我发现我得到了一个缓冲区溢出。我目前正在使用一个名为OnInitIDA的简单方法进行测试,我在其中所做的只是cout语句和返回。当我运行此命令时,HRESULT返回的值将为0,但它不会输出我期望的行。通过使用调试器的step over和step into函数,我发现调用OnInitIDA时没有输入代码,而是进入了另一个名为GetInclusionList的方法。一旦我在这个方法中放置了一条语句,当应用程序运行时,这一行就
如果有帮助的话,我的代码已经发布在这里:这听起来像是您在构建客户端后更改了界面
清理和重建所有项目是个好主意。我找到了问题的答案。基本上,当我创建dll项目时,它继承自IDispatch,但是我在测试应用程序中使用的接口期望它继承自IUnknown。这意味着接口不匹配,IDispatch从IUnknown继承并添加了许多方法。更改这些以匹配已工作的dll