直接运行编译的VB6 exe - Automation Error 2147417848&访问冲突读取位置0x01289B5C

时间:2015-02-12 15:59:42

标签: excel vb6 automation

当我第二次运行VB6应用程序时,我得到了真正常见的自动化错误。但是,在VB6调试模式下,代码工作正常。在我编译代码并第二次运行某些函数之后,我会遇到自动化错误2147417848 - 调用的对象已与其客户端断开连接。

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

  

vb6_2_12_2015.exe中0x76B33E8D(oleaut32.dll)的未处理异常:0xC0000005:访问冲突读取位置0x01289B5C。

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

1 个答案:

答案 0 :(得分:0)

该消息表示您的程序正在访问已释放或从未存在的内存(即变量或对象)(通常是因为创建失败且程序员未检查)。 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:\windows\system32\cmd.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中而不是单独的文件中。确保使用No Optimisations编译程序并勾选Create Symbolic Debug Info框。两者都在项目属性的“编译”选项卡上。

CoClassSyms(microsoft.com/msj/0399/hood/hood0399.aspx)也可以从类型库中创建符号。