调用dcom控件时,报了“尚未调用 CoInitialize”错误,我已经调用了CoInitialize函数了(50分)

  • 主题发起人 主题发起人 yesheng
  • 开始时间 开始时间
Y

yesheng

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个多线程的程序,我在县城开始时调用了CoInitialize函数,在县城结束时调用了
CoUninitialize函数,请教各位达人
 
必须在调用COM之前调用CoInitialize,或者同步方法调用。
每一个线程里面都必须调用CoInitiazlie!
 
我已经调用了,可是还是报这个错!!!
 
估计你的CoInitialize调用失败了,判断一下返回值.

if Coinitialize( nil ) = S_OK then
 
果然是调用失败了,我应该怎么办呢?
 
我调用初始化成功后,包了一个“应用程序调用了为另一个线程排列的界面”这个错,这是
怎么回事???
 
你调用的那Com对象的线程模式是什么?
STA or MTA?
 
DCOM中间层的多线程怎么写?
谁能给我个例子? tang_717@263.sina.com
分数好商量!
 
那就不能简单的调用Coinitialize( nil )了,它默认以STA初始化Com库.
用CoInitializeEx(nil, COINIT_MULTITHREADED); 进入MTA模式
 
to 唐佐平:
不用自己写,Delphi 自动替你完成.你选择响应的线程模式就行了
 
TO:xeen
我知道可以选择线程模式,但当我选择多线程模式时,客户端多了就会死机,
听说要自己写代码解决线程间的冲突,我不知道怎么写,我问的是这个。
 
你必须在线程的,execute函数的里调用 coninitialize才行!
 
CoInitializeEx(nil, COINIT_MULTITHREADED);
我在DCOM构件中调用了上面的函数
还是报了“应用程序调用了为另一个线程排列的界面”这个错
这到底是怎么回事?
 
faint,你到底在那里调用的?
是应该在调用Com组件的客户端线程的Excute方法里调用,DCom
组件是不用调用的.
 
我在客户端调用了,还是报了“应用程序调用了为另一个线程排列的界面”这个错
请问报这个错的原因是什么???
 
一般来说是接口没marshal造成的,你的接口是从主线程传过来的吧.
最好把你的DComconneciton也都够构造在你的线程中.
 
严重关注!
 
我的过程是
在线程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);
就报了“应用程序调用了为另一个线程排列的界面”这个错

这到底是为什么?我好郁闷!
 
明白了,你不能在线程B的 Create方法中创建那个Com对象,
而应该在Execute方法中,要注意Create方法中的代码是在创建
这个线程的线程中执行的,这时候被创建的线程还没开始执行.
 
后退
顶部