COM接口,崩溃

luojc714 2012-06-11 11:08:52
我在使用一个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.我应该怎么才能正确调用这个接口。
...全文
365 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2012-09-06
  • 打赏
  • 举报
回复
单步调试,首先看COM对象创建成功否,然后检查参数的合法性,再调用某个方法。
缘中人 2012-09-06
  • 打赏
  • 举报
回复
就是,也行是com组件需要什么环境之类dll、配置文件等,或者com组件本身代码有问题呢
我不懂电脑 2012-06-12
  • 打赏
  • 举报
回复
也许这个com本身就有问题
mabaoyes 2012-06-12
  • 打赏
  • 举报
回复
可能需要有一定的调用顺序,比如:有个函数初始化COM,再有启动COM,后面才是使用其函数...
关闭COM,释放COM. 一般函数调用顺序从上而下;
分析下函数名称的规律,参考调用的例子。

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧