我编写一个多层结构的程序,在中间件COM使用的Apartment Model线程模式,客户端通过主线程的数据模块访问COM。现在我想客户端另开一个线程但不另建数据模块,为了实现这个功能。参考《Win2000编程技术内幕》中关于COM住所建调度的方法使用CoMarshallnterThreadInterfaceInStream函数,可是调用它总是返回E_NOINTERFACE。请教各位大虾这是怎么回事?我该如何实现这一功能?我使用的是TSocketConnection和中间件联接。
解决方案 »
- 判断闰年出错,'END' expected but 'ELSE' found
- 将窗体控件信息保存在文件里面,怎样将控件的事件保存在文件里面?
- 修改EXE文件图标的问题.
- 如何用判断edit类,并实现回车跳转
- 我想将一个数据集放入TDBGrid中某列的picklist中,如何代码实现
- flash控件背景颜色如何改???
- group by 产品名称,规格,价格不明白分组有什么作用
- 如何在DELPHI的datetimepicker控件中输入时间空值??
- 关于硬盘保护的问题!还有为什么我的分总是零
- 这个语句回返回什么?
- Treeview
- 为什么我用CreateThread创建线程时.参数不能传递进去?
也许你的做法有误。基本上是这样:
在主线程中将Connection OPEN开,然后调用CoMarshallInterThreadInterfaceInStream对IAppServer(用GetServer或把AppServer属性转为IDispatch再转为你的RDM接口--Ixxxrdm)进行Marshall,其中IStream参数为线程的局部变量。
然后在线程的Execute中用CoUnmarshalInterface(注意不要用CoGetInterfaceAndReleaseStream,因为DELPHI会自动释放IStream,所以会出错)解出接口,然后就可以在线程里用这个Ixxxrdm接口了,不过这样的话,你要在线程中用ClientDataset就会比较麻烦,因为只能自己去调用AS_xxx那几个方法了。