COM接口,崩溃
我在使用一个COM组件时,无论调用他定义的什么接口都会出现非法地址访问,引起程序崩溃。
具体如下,pFun是一个COM接口指针,现在调用Fun1接口,关键代码如下
98: hr = pFun->fun1(&iCount);pFun为0x003b7008
004010F9 mov eax,dword ptr [esp+8];eax==0x003b7008
004010FD or ebp,0FFh
00401100 lea edx,[esp+0Ch]
00401104 mov dword ptr [esp+0Ch],ebp
00401108 mov ecx,dword ptr [eax]
0040110A push edx
0040110B push eax
0040110C call dword ptr [ecx+10Ch];跳到下面去,10037DE0处
...
10037DE0 mov eax,dword ptr [esp+4];该步骤之后,eax==0x003b7008
10037DE4 mov ecx,dword ptr [eax+24h];该步骤之后,ecx的值是错误的,
10037DE7 mov edx,dword ptr [ecx];所以出现非法访问,程序崩溃。
10037DE9 call dword ptr [edx+184h]
...
对于这个COM组件,我仅仅拥有一个TLB文件以及这个DLL(进程内组件)文件;
我也无法去咨询组件提供方。
请问,
1.为什么调用每个接口函数都会死掉?
2.既然是他提供了这样的接口,为什么我不能调用?
3.看汇编代码,怎么感觉跟一般的调用不一样,我跟踪别的COM调用时,0040110C处Call之后,会出现jmp语句,而这个不是。
4.我应该怎么才能正确调用这个接口。