在ISAPI程序和客户端,自己定义了一个简单的线程类,代码如下:type
   TMyThread = class(TThread)
private
  FCDS: TClientDataSet;
protected
  procedure Execute; override;{ 执行线程的方法 }
public
  constructor Create(CDS: TClientDataSet); virtual;
end;{ TMyThread }constructor TMyThread.Create(CDS: TClientDataSet);
begin
  FCDS := CDS;  //参数中的CDS赋给线程类的私有变量FCDS
  FreeOnTerminate := False;
  inherited Create(True);
end;procedure TMyThread.Execute;
begin
  inherited;
  try
    FCDS.Open;  //在线程中打开数据集:此处出错
  except
    ShowMessage('线程发生异常'); { 线程异常 }
  end;
end;在运行中:
   FCDS.Open;  //在线程中打开数据集:此处出错 
这一行出错,错误提示: project project1.exe raised exception with message 'Microsoft MSXML is not installed" process stopped. Use Step or Run to continue

解决方案 »

  1.   

    使用多线程需要注意几点,如果是需要共用某些可能会操作到如MSXML等涉及到COM对象的话,在线程当中需要调用CoInitializeEx(Nil, COINIT_MULTITHREADED);
    例如:procedure TMyThread.Execute; 
    begin 
      //inherited; 这一行不需要
      CoInitializeEx(Nil, COINIT_MULTITHREADED);
      try

        try 
          FCDS.Open;  //在线程中打开数据集:此处出错 
        except 
          ShowMessage('线程发生异常'); { 线程异常 线程里面不能使用ShowMessage,否则可能显示不出来
        end;
      finally
        CoUninitialize;
      end; 

    end; 
      

  2.   

    感谢僵哥,果然,加上CoInitializeEx(Nil, COINIT_MULTITHREADED)这句问题解决。
    另外一个帖麻烦帮我再看下:http://topic.csdn.net/u/20081212/08/07157dfd-7a08-4666-a50d-4eaa8adb6ea7.html