咨询一个COleDispatchDriver::InvokeHelper执行速度很慢 而且不规律报COleDispatchDriver异常的问题

weixin_41617172 2019-01-05 11:04:05
我的开发环境是WIN7 + VS2008,做的是一款跟液体仿真有关的软件,需要安装Flowmaster v7.5,当时控件供应者提供了一个xx.dll的接口供调用,然后还有一个.h文件和.cpp文件,在提供的测试代码中,其他部分都没有问题,但是当执行一个功能是分析结果的函数的时候,执行速度非常慢,而且有的时候能成功,有的时候却报异常。
调用这个函数的代码是:network.RunAnalysis("zz","vc call","SS",FALSE,FALSE);
追踪进去函数源代码是
CString IDE_Doc::RunAnalysis(LPCTSTR sOwner, LPCTSTR sDescription, LPCTSTR sAnalysisCode, short shtHeatTransfer, short shtComponentInteraction)
{
CString result;
static BYTE parms[] =
VTS_BSTR VTS_BSTR VTS_BSTR VTS_I2 VTS_I2;
InvokeHelper(0x9, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms,
sOwner, sDescription, sAnalysisCode, shtHeatTransfer, shtComponentInteraction);
return result;
}

调试下的输出为:
线程 'Win32 线程' (0x88c) 已退出,返回值为 0 (0x0)。
“dll_ss.exe”: 已加载“ImageAtBase0x10050000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0x8440000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x10050000”
“dll_ss.exe”: 已加载“ImageAtBase0x5bcb0000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0x8500000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x5bcb0000”
“dll_ss.exe”: 已加载“C:\Program Files (x86)\Flowmaster\FlowmasterV7\Flowmaster.Analysis.FluidProperties.dll”,未使用调试信息生成二进制文件。
“dll_ss.exe”: 已加载“ImageAtBase0x5bca0000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0x8540000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x5bca0000”
“dll_ss.exe”: 已加载“C:\Program Files (x86)\Flowmaster\FlowmasterV7\Flowmaster.External.FluidProperties.dll”,未使用调试信息生成二进制文件。
“dll_ss.exe”: 已加载“ImageAtBase0x5bc90000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0x8550000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x5bc90000”
“dll_ss.exe”: 已加载“C:\Program Files (x86)\Flowmaster\FlowmasterV7\Flowmaster.Scripting.dll”,未使用调试信息生成二进制文件。
“dll_ss.exe”: 已加载“ImageAtBase0x5bc70000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0x8560000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x5bc70000”
“dll_ss.exe”: 已加载“C:\Program Files (x86)\Flowmaster\FlowmasterV7\Flowmaster.LibraryAccess.dll”,未使用调试信息生成二进制文件。
线程 'Win32 线程' (0x1310) 已退出,返回值为 0 (0x0)。

(到这里要执行二三十秒才往下跳)

“dll_ss.exe”: 已加载“ImageAtBase0x5b9e0000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0xd240000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x5b9e0000”
“dll_ss.exe”: 已加载“C:\Program Files (x86)\Flowmaster\FlowmasterV7\Flowmaster.Analysis.Models.dll”,未使用调试信息生成二进制文件。
“dll_ss.exe”: 已加载“ImageAtBase0x5b9b0000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0x6380000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x5b9b0000”
“dll_ss.exe”: 已加载“C:\Program Files (x86)\Flowmaster\FlowmasterV7\Flowmaster.Analysis.Controllers.dll”,未使用调试信息生成二进制文件。
“dll_ss.exe”: 已加载“ImageAtBase0x6630000”,未加载任何符号。
“dll_ss.exe”: 已加载“ImageAtBase0x6660000”,未加载任何符号。
“dll_ss.exe”: 已卸载“ImageAtBase0x6630000”
“dll_ss.exe”: 已加载“C:\Program Files (x86)\Flowmaster\FlowmasterV7\Interop.MSScriptControl.dll”,未使用调试信息生成二进制文件。
“dll_ss.exe”: 已加载“C:\Windows\SysWOW64\msscript.ocx”
“dll_ss.exe”: 已加载“C:\Windows\SysWOW64\vbscript.dll”

追踪进去
// make the call
SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,
&dispparams, pvarResult, &excepInfo, &nArgErr);
主要是这个函数调用耗时很久,而且是不是编译器还报一个未处理的异常COleDispatchException
按照我老师以前的经验,这个过程本来应该只要一两秒钟的,但是我这样执行一次速度太慢了。
由于需要在代码中频繁调用,所以说肯定不现实,请问一下各位,知道这是什么原因嘛,万分感谢。
...全文
378 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2019-01-07
  • 打赏
  • 举报
回复
捕捉 COleDispatchException ,看是否有报错信息,
或者输出传递的参数,让控件提供者帮助分析

蒋晟 2019-01-07
  • 打赏
  • 举报
回复
接口是封装好没法打开看那COleDispatchDriver是哪里来的? 异常得抓下来报给用户(比如让用户选择重试还是取消)。异常包含的消息也有助于诊断原因。
weixin_41617172 2019-01-05
  • 打赏
  • 举报
回复
请问一下这是什么原因呢?弄了好几天了没啥头绪,接口是封装好的没法打开看里面的东西,是在软件里面需要进行什么设置,还是说VS使用OLE控件需要导入什么东西还是设置什么?望有相关经验的同志们指点一下啦

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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