我写的一个线程类出了奇怪的问题(100分)

  • 主题发起人 主题发起人 hpn_cao(小海)
  • 开始时间 开始时间
H

hpn_cao(小海)

Unregistered / Unconfirmed
GUEST, unregistred user!
把要执行的代码放在Execute中,出现“标记没有引用存储”的错误提示
而放在Create中就没有问题

回复人: King_Dragon() ( ) 信誉:100 2002-3-6 19:36:15 得分:0


说说你的具体问题及程序。
Top

回复人: jackystar(我) ( ) 信誉:95 2002-3-6 20:18:30 得分:0


把源代码拿出来,大家帮你分析一下
Top

回复人: hpn_cao(小海) ( ) 信誉:100 2002-3-6 20:33:05 得分:0


constructor TDataThread.Create(StrThread: string);
begin

CurPath := ExtractFilePath(ParamStr(0));
ThreadIni := TIniFile.Create(CurPath+'Configuration/ThreadWebs.ini');
ScriptIni := TIniFile.Create(curpath+'Configuration/script.ini');
GetAllParams(StrThread) ;
//**************************************
//**************************************
inherited Create(false) ;
end;

destructor TDataThread.Destroy;
begin

ThreadIni.Free ;
ScriptIni.Free ;
inherited;
end;

procedure TDataThread.Execute;
begin

OnTerminate := FrmMain.ThreadsDone;
{GetContent是我写的DLL的一个导出函数}
GetContent(aurl, aaccordantText,aaccordantimage, aCurTable_list , aCurCol_list,aCurTable_page ,aCurTableRow, aCurTableCell, abegin
Text , aEndText ,aThreadnum ,aInsertTable , aatype,aSavePath) ;
end;

Top

回复人: jovian0999() ( ) 信誉:100 2002-3-6 21:18:37 得分:0


可能你写的GetContent函数不是线程安全的。
Top

回复人: 2zhenggang(笑红尘) ( ) 信誉:100 2002-3-6 21:32:19 得分:0


建议你用LoadLibrary()试试
Top

回复人: hpn_cao(小海) ( ) 信誉:100 2002-3-7 8:56:46 得分:0


用LoadLibray还是不行,程序总是到了调用DLL函数GetContent时过不去,说
没有调用CoInitialize() ,我在Execute函数中加上了CoInitialize(nil) ;
程序倒是可以执行了,可是GetContent中的操作却不运行了,我快疯了
 
说说题外话,我有一次写DLL(dpr),再写一个test(dpr),后来我将它们存储成一个bgp,然
后我运行了test,一调试发现我切到DLL的函数中去调试去了,很有意思,你试试这样调试一
下你的DLL.可能是你的DLL使用了某个ActiveX/ADO,你将DLL中begin
处加入CoInitialize(nil)
再在它的退出处理(忘了在哪看help(GetModuleHandle中的see also))中写CoUnInitialize;
 
乱七八糟的看不明白。
OnTerminate := FrmMain.ThreadsDone;
这一句一般是放在create里。
 
开始时调用CoInitialize(nil);
tmpxml := CreateOLEObject('Microsoft.XmlDom') as IXMLDOMDocument;
。。。。。
结束调用
CoUninitialize();
 
后退
顶部