Delphi COM对象多线程
发布时间:2020-12-15 09:45:36 所属栏目:大数据 来源:网络整理
导读:我已经编程了一段时间,关于COM / ActiveX对象,我面临着非常奇怪的问题,这些问题显然超出了我的知识. 这里是. 我的软件使用后期绑定与COM对象进行通信. 由于这些COM对象与硬件(例如科学相机)对话,我选择将所有调用都转换为专用线程.这允许主线程与用户交互.
我已经编程了一段时间,关于COM / ActiveX对象,我面临着非常奇怪的问题,这些问题显然超出了我的知识.
这里是. 我的软件使用后期绑定与COM对象进行通信. 由于这些COM对象与硬件(例如科学相机)对话,我选择将所有调用都转换为专用线程.这允许主线程与用户交互. 所以我将消息从主用户线程(或任何其他线程)发送到设计为仅处理activeX的线程. 这是它的样子 procedure MythreadActiveX.execute; begin CoInitialize(nil); Try ComObject :=CreateOLEObject(COMID); While not Terminated do Begin If PeekMessage(Msg,PM_REMOVE) then Begin TranslateMessage(Msg); DispatchMessage (Msg); end; If (FEvent.WaitFor(TimOutMs)=wrSignaled) then // Wait for command Begin FEvent.ResetEvent; Try Case COM_Order of Oder1:Begin ......... end Oder2:Begin ......... end end; FEventComplete.SetEvent; end; end; CoUnInitialize; end; 这与大多数COM服务器的魅力相似,但与其他COM DLL / Server失败,尤其是在Visual Basic中编写,我注意到了进程浏览器,尽管我在上面做了什么,但是ActiveX代码被执行到主线程中! 原因是什么?这与ActiveX线程模型有关吗? 谢谢 解决方法
CreateOLEObject在内部使用
CoCreateInstance ,并且仅将dwClsContext传递为CLSCTX_LOCAL_SERVER(因此没有CLSCTX_INPROC_SERVER),应强制COM将任何DLL加载到特定的dllhost.exe中.我没有在这里尝试自己的工具,但通过额外的包装,这可以解决您的问题.
另见this question. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Perl Project Improvement(1) Perl Installation and CPAN
- perl perlpacktut对我没有意义
- 测试 – 如何在golang中测试并发和锁定?
- delphi2010中FastReport的安装方法
- golang(0)
- POJ 2429 GCD & LCM Inverse Pollard_rho大数因子分解
- delphi – 测试过程是否在DUnitX中引发异常
- 调试VB6 Crash Dump
- perl 生成 .vcf文件 以导入电话
- Get value from agent failed: cannot connect to [[127.0.