Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在ATL COM dll中调用了错误的方法_C++_Visual C++_Dll_Com_Atl - Fatal编程技术网

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

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的方法。一旦我在这个方法中放置了一条语句,当应用程序运行时,这一行就

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


如果有帮助的话,我的代码已经发布在这里:

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


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

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