在三层结构中,当利用APRTMENT线程模式时,我调用CALLBACK时,出现‘应用程序调用一个已为另一线程整理的接口’的错误?(200分)

  • 主题发起人 主题发起人 http
  • 开始时间 开始时间
原因是线程造成的。利用线程模式时,每一个连接在不同的线程(对delphi5)中,而一般接口(FreeThread类型除外)无法直接在线程中传递。
要在不同线程中传递接口需要marshal.
CoMarshalInterThreadInterfaceInStream
CoGetInterfaceAndReleaseStream
 
1.F5,F8跟踪Client端创建的COM对象指针是否为空
2.client端主窗体用 CoInitializeEx(Nil,COINIT_APARTMENTTHREADED);
其他线程用 CoInitializeEx(Nil,COINIT_MULTITHREADED);
 
我不知道怎么实现MARSHAL,请各位大侠继续指导
 
Apartment (or Single-threaded apartment) Clients can call an object抯 methods only from the thread on which the object was created. Different objects from the same server can be called on different threads, but each object is called only from that one thread. Instance data is safe, global data must be protected using critical sections or some other form of serialization.The thread抯 local variables are reliable across multiple calls.Some performance benefits.Objects are easy to write, but clients can be tricky.Primarily used for controls for Web browsers.
 
调用CALLBACK?你用这干什么?
我到目前为止还没有用过,请教了。
 
cmldy,上次你说TCP/IP不支持CALLBACK,但是,我觉得应是可以的,因为DELPHI5实战说TCP/IP连接支持PoLL/PUSH,而且我试了一下,也觉得可以,只是会出现上面的问题,你上面说的是利用APARTMENT线程模式时,每一个应用服务器可以有多个APARTMENT,每一个客户的调用可以有对应的实例,对吗?
随便问一下,你的资料是哪里来的,可以告诉我吗?
 
SocketConnection 不支持CALLBACK出自BORLAND的官方问答
community.borland.com
NT No Client Callback
Security Setup Capability
Sockets X
DCOM X X
OLE Enterprise X
 
需要详细地址,行吗?
 
就是在community.borland.com /FAQ
 
cmldy,如我理解没错的话,应该为DELPHI 3。X的TCP/IP不支持CALLBACK,
但是,DELPHI5。0应该是支持的,只是不能用静态联编。
 
-)http
好象是的,但我在DELPHI5下没有试通过
你试成功了吗?
 
说得没错,以前版本的SocketConnection不支持回调,D5的支持。
不过我用D5回调没有报什么错。还请HTTP把做法说详细点。
 
请问你的回调是可以通知所有人,还是仅仅通知自己呢?我是希望当某一事件发生时,通知所有人。
 
通知所有人也可以呀。在服务端建立一个Variant数组,存放客户端的接口,
有什么事件就一个循环通通发过去。
 
我可以看看你的例子吗?对了,随便问一下,你是用动态连编还是静态连编,可以实现在客户断不要TLB的文件吗?谢谢你的回答。
 
-)http
用DCOM是没有问题(通知所有人)
但用SOCKET我上传接口时始终通不过
 
接受答案了.
 
后退
顶部