200分紧急求助!!!一个在线程中和数据库握手的问题!(200分)

  • 主题发起人 主题发起人 xiaoxinxiaoxin
  • 开始时间 开始时间
X

xiaoxinxiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
我在设计时把一个TCLIENTDATESET控件放在FORM上,在线程中调用TCLIENTDATESET.open,
然后就显示“尚未调用CoInitialize”错误.我后来在线程的执行事件中加入了
CoInitialize(nil),又出现‘应用程序调用一个已为另一线程整理的接口’的错误!请大伙最好
写出代码.
虽然以前的帖子有很多关于这方面的问题,但是我都试过了,好像都不行啊!
谢谢大伙了!!!
 
如果要调用ClientDataSet等控件,应该通过同步命令进行.
 
哦,我忘了说了,我用Synchronize同步线程,还是出错啊。
请大伙把关键的代码写出来,OK?先谢谢了!
 
现在又有问题了,在程序关闭后就提示非法操作。
我在激活线程调用了CoInitialize,在线程中止时调用了CounInitialize,
但是还是不行啊!
 
这已经涉及到了接口在线程间的传递问题,你必须将接口进行Marshal操作。
解决方法:
1、将ClientdataSet在线程中创建与释放,打开后将数据(Data属性)赋予Form上的
Clientdataset,这样就相当于打开了Form上的Cleintdataset;
2、对接口做Marshal,但是接口的调用是在AS_GetRecord是在Clientdataset的内部实现
调用的,因此不行。
所以,使用第一种方法。但你需要把相关属性设置。
 
同意LLLYJ。
 
我已经找到原因了。原来是我自己做的包装了CLIENTDATASET的控件出了问题,但是还是很感谢大伙!
CJF和LLLYJ每人100,谢谢了!
已经接受答案!
 
后退
顶部