注意:
- 传递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/