直接运行编译的VB6 exe - 自动化错误2147417848和访问冲突读取位置0x01289B5C



当我第二次运行VB6应用程序时,我遇到了一个非常常见的Automation错误。但是,代码在VB6调试模式下运行良好。在我第二次编译代码并运行某个函数后,我会遇到Automation错误2147417848——调用的对象已与其客户端断开连接。

然后我通过Visual Studio调试了应用程序,得到了以下异常错误:

vb6_2_12_2015.exe中0x76B33E8D(oleout32.dll)处出现未处理的异常:0xC0000005:读取位置0x01289B5C时发生访问冲突。

是因为我的dll注册有问题吗?

该消息表示您的程序正在访问已释放或从未存在的内存(即变量或对象)(通常是因为创建失败,程序员没有检查)。内存地址低于64K表示分配失败。

首先,编译程序时不需要优化和调试信息。当你崩溃时,做一个堆栈跟踪,它会列出函数和参数。

您也可以在调试器中启动。

windbg或ntsd(ntsd是一个控制台程序,可能已安装)。两者都来自Windows调试工具。

下载并安装Windows 的调试工具

http://msdn.microsoft.com/en-us/windows/hardware/hh852363

安装Windows SDK,但只需选择调试工具。

在C:\中创建一个名为Symbols的文件夹

启动Windbg。文件菜单-符号文件路径并输入

srv*C:symbols*http://msdl.microsoft.com/download/symbols

然后

windbg -o -g -G c:windowssystem32cmd.exe /k batfile.bat

您可以按F12停止它,kb将显示调用堆栈(g继续程序)。如果有错误,它也会停止并显示它们。

键入lm列出加载的模块,键入x *!*列出符号,键入bp symbolname设置断点

da displays the ascii data found at that address
dda displaysthe value of the pointer  
kv 10 displays last 10 stack frames
lm list modules
x *!* list all functions in all modules
p Step
!sysinfo machineid

如果在VB6中编程,则此环境变量link=/pdb:none将符号存储在dll中,而不是单独的文件中。确保编译程序时没有优化,并勾选"创建符号调试信息"框。两者都在项目属性的"编译"选项卡上。

此外,CoClassSyms(microsoft.com/msj/039/hood/hood039.aspx)可以从类型库中生成符号。

相关内容

最新更新