c++ - COM 方法调用在传递 BSTR 时返回灾难性故障

标签 c++ windows visual-studio-2008 com

修订自 previous question

注意:

  • 传递BSTR变量给COM方法,HRESULT返回8000FFFF
  • 之前使用接口(interface)指针进行的调用成功:HRESULT 为0
  • 执行,在 Visual Studio 内部成功,在外部失败 - 发布和调试

插图:

BSTR raw_sim_Open = SysAllocString (L"c:\\example.S8");

hresult = pis8->raw_Open (raw_sim_Open); //0x8000FFFF returned

编辑 - WinDbg:

First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=003a5be8 ebx=00009000 ecx=003a0208 edx=77606e00 esi=0012ec90 edi=00191b14
eip=003a0283 esp=0012ec34 ebp=0012ecb4 iopl=0         nv up ei ng nz ac pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010296
Missing image name, possible paged-out or corrupt data.
Missing image name, possible paged-out or corrupt data.
<Unloaded_PI32.dll>+0x3a0282:
003a0283 0080023a0088    add     byte ptr [eax-77FFC5FEh],al ds:0023:883a95ea=??

最佳答案

调试版本和发布版本之间最显着的区别之一是调试库将内存初始化为零,而发布库则不会。因此,如果某些东西在调试版本中工作但在发布版本中失败,则可能的原因是一个或多个未初始化的变量。

关于c++ - COM 方法调用在传递 BSTR 时返回灾难性故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669415/

相关文章:

c++ - 字符(字符串)到整数

c++ - apache thrift C++ 服务器客户端连接超时

c++ - VS 2008 调试 - 查找加载了哪个对话框

visual-studio-2008 - 带有平台工具集 v90 的 Visual Studio 2013

c++ - 使用 FFmpeg API 加载 G.729 解码器时出现问题

c++ - 进程终止,状态为 -1073741571(0 分钟,3 秒)

windows - 在 unix (linux/osx) 中创建的符号链接(symbolic link)在 windows 中仍然有效吗?

c# - 如果不满足某些条件,如何停止加载 .NET 应用程序

Windows 批处理文件 - 移动文件仅在任务计划程序中不起作用

windows - 如何在 Windows 的 cmd.exe 中终止 java 进程(按名称)?