32位工作正常,但64位给出错误:Microsoft C ++异常:内存位置的_com_error

时间:2014-10-03 20:22:06

标签: c++ exception com crash 32bit-64bit

我的Visual Studio C ++ 2008项目在调试和发布模式下在32位平台上构建可执行文件,没有任何问题和可执行文件运行并生成预期结果。

我有一些大小超过26000行乘26000列(双类型)的矩阵,而在32位平台中,我无法为这个矩阵分配内存。因此我必须切换到64位平台。

在64位平台上,我可以构建我的可执行文件而没有任何错误(调试和释放模式),但在尝试运行可执行文件时,我在调试模式下收到以下消息:

enter image description here

发布模式中的以下消息:

enter image description here

我在调试模式中逐步完成了代码,我收到的第一条消息就是这个(发生在Microsoft COM中):

enter image description here

每次我点击上一条消息的继续时,我都会在名为STAADLibBentley.tli的文件的不同位置收到不同的错误消息,如下面显示的两个作为示例:

enter image description here enter image description here

STAADLibBentley.tli的顶部写下以下注释,其中显示TLB文件用于Win32,编译器正在实现TLB文件的包装器以在64位平台中使用它。

enter image description here

看起来这个STAADLibBentley.tli文件是一个由编译器自动实现的包装器,与我在我的C ++代码中使用的STAADLibBentley.tlb文件相关,并且与STAAD API,STAAD相关是一个我通过TLB库进行通信的软件。我正在使用这样的TLB文件:

enter image description here

现在问题是,如果编译器正在为Win32 TLB文件编写包装器以在64平台中使用它,为什么我在STAADLibBentley.tli文件中接收上面提到的错误消息。有谁知道可能的原因是什么?

1 个答案:

答案 0 :(得分:0)

我和熟悉STAAD软件API的人交谈时,我被告知API是32位Microsoft COM的组件而不是64位。幸运的是,在64位平台上使用32位COM有一些技巧,如下面的链接,我可以尝试一下:

http://www.gfi.com/blog/32bit-object-64bit-environment/

Getting the GUID of an installed COM object