Y yesheng Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-09 #1 这是一个多线程的程序,我在县城开始时调用了CoInitialize函数,在县城结束时调用了 CoUninitialize函数,请教各位达人
K Kingron Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-09 #2 必须在调用COM之前调用CoInitialize,或者同步方法调用。 每一个线程里面都必须调用CoInitiazlie!
X xeen Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-09 #4 估计你的CoInitialize调用失败了,判断一下返回值. if Coinitialize( nil ) = S_OK then
Y yesheng Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #6 我调用初始化成功后,包了一个“应用程序调用了为另一个线程排列的界面”这个错,这是 怎么回事???
X xeen Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #7 你调用的那Com对象的线程模式是什么? STA or MTA?
唐 唐佐平 Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #9 DCOM中间层的多线程怎么写? 谁能给我个例子? tang_717@263.sina.com 分数好商量!
X xeen Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #10 那就不能简单的调用Coinitialize( nil )了,它默认以STA初始化Com库. 用CoInitializeEx(nil, COINIT_MULTITHREADED); 进入MTA模式
X xeen Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #11 to 唐佐平: 不用自己写,Delphi 自动替你完成.你选择响应的线程模式就行了
唐 唐佐平 Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #12 TO:xeen 我知道可以选择线程模式,但当我选择多线程模式时,客户端多了就会死机, 听说要自己写代码解决线程间的冲突,我不知道怎么写,我问的是这个。
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #13 你必须在线程的,execute函数的里调用 coninitialize才行!
Y yesheng Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #14 CoInitializeEx(nil, COINIT_MULTITHREADED); 我在DCOM构件中调用了上面的函数 还是报了“应用程序调用了为另一个线程排列的界面”这个错 这到底是怎么回事?
X xeen Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #15 faint,你到底在那里调用的? 是应该在调用Com组件的客户端线程的Excute方法里调用,DCom 组件是不用调用的.
Y yesheng Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #16 我在客户端调用了,还是报了“应用程序调用了为另一个线程排列的界面”这个错 请问报这个错的原因是什么???
X xeen Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #17 一般来说是接口没marshal造成的,你的接口是从主线程传过来的吧. 最好把你的DComconneciton也都够构造在你的线程中.
Y yesheng Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #19 我的过程是 在线程A中调用了线程B的Create函数,在线程B的Create函数中 ladt := CoLoginAdtDCom_.CreateRemote('DComServerName'); ladt.set_username := ''; 以上是成功的 而我在线程B的另一个函数handle_r中 调用ladt.set_username := 'fdas'; 运行时就报了"CoInitialize 尚未调用"的错误 我在前面加了一个 CoInitializeEx(nil,COINIT_MULTITHREADED); 或者CoInitialize(nil); 就报了“应用程序调用了为另一个线程排列的界面”这个错 这到底是为什么?我好郁闷!
我的过程是 在线程A中调用了线程B的Create函数,在线程B的Create函数中 ladt := CoLoginAdtDCom_.CreateRemote('DComServerName'); ladt.set_username := ''; 以上是成功的 而我在线程B的另一个函数handle_r中 调用ladt.set_username := 'fdas'; 运行时就报了"CoInitialize 尚未调用"的错误 我在前面加了一个 CoInitializeEx(nil,COINIT_MULTITHREADED); 或者CoInitialize(nil); 就报了“应用程序调用了为另一个线程排列的界面”这个错 这到底是为什么?我好郁闷!
X xeen Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-10 #20 明白了,你不能在线程B的 Create方法中创建那个Com对象, 而应该在Execute方法中,要注意Create方法中的代码是在创建 这个线程的线程中执行的,这时候被创建的线程还没开始执行.