Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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++ 单步执行拖放过程(或任何其他系统调用)_C++_Visual Studio_Dll_Com - Fatal编程技术网

C++ 单步执行拖放过程(或任何其他系统调用)

C++ 单步执行拖放过程(或任何其他系统调用),c++,visual-studio,dll,com,C++,Visual Studio,Dll,Com,我有一个不使用标准库的应用程序。相反,它使用存根调用LoadLibrary/GetProcAddress,然后通过生成的函数指针调用函数 使用上述方法,我的应用程序正在ole32.dll中调用DoDragDrop。电话返回E_意外,这显然意味着“灾难性失败” 我想问的是,有人知道一种方法来发现DoDragDrop通话中发生的事情吗?具体来说,我是否可以发现它正在查找但找不到的函数或变量?(我猜它想要访问在我调用DoDragDrop时未加载的某个函数或变量,如果我可以显式加载它,调用将成功。)显然

我有一个不使用标准库的应用程序。相反,它使用存根调用LoadLibrary/GetProcAddress,然后通过生成的函数指针调用函数

使用上述方法,我的应用程序正在ole32.dll中调用DoDragDrop。电话返回E_意外,这显然意味着“灾难性失败”

我想问的是,有人知道一种方法来发现DoDragDrop通话中发生的事情吗?具体来说,我是否可以发现它正在查找但找不到的函数或变量?(我猜它想要访问在我调用DoDragDrop时未加载的某个函数或变量,如果我可以显式加载它,调用将成功。)显然,我无法单步执行调用-尝试在DoDragDrop调用后只运行函数并单步执行代码中的行

:)


(我在XP中使用VS2005。)

我记得当我忘记为进行调用的线程调用OleInitialize(Ex)/CoInitialize(Ex)时,会发生类似的情况。注意公寓必须是STA。

我不能说我真的建议它,但如果切换到“反汇编”窗口,然后单步执行,则可以进入(至少是用户模式部分)系统调用。不过,除非你已经相当习惯汇编语言,否则它可能不会对你有多大好处。这有点简单,但没有帮助,因为我对汇编语言一窍不通!但是它把我放到了系统符号文件中,我正在从MS.下载一个集合。我希望它能在反汇编列表中添加一些我能理解的东西……好吧,我已经得到了符号,并且我已经逐步完成了代码,这现在是有意义的。看起来一个名为GetMarshalledInterfaceBuffer的函数中名为CoMarshalInterface的函数失败了(这两个函数都在ole32.dll中)。我想我的界面可能有点塞满了。AddRef等可能不在我的对象的前面,我认为COM需要它,尽管我以前从未因为它而失败过。我现在头疼!所以我明天会再讨论它,我想……你把
AddRef
放在哪里并不重要,只要你继承了
IUnknown
(你应该继承)。由于它将
AddRef
放在第一位,您的覆盖将保持在第一位。