TClass1 = class (TObject)
private:
m_FServer : ITACSServer;
public:
procedure DCOMConnect();
end;
procedure TClass1::DCOMConnect();
begin
m_FServer := CoTACSServer.CreateRemote(strRemoteComputerName);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
m_Class1 := TClass1.Create();
m_Class1.DCOMConnect();
end;
Объект данного класса (класс приведён не полностью) создаётся при нажатии на кнопку формы,
далее вызывается метод коннекта с DCOM объектом на удалённой машине, затем вызываются различные методы
DCOM объекта. Всё отлично работает.
Далле возникла задача некоторые методы DCOM запускать в отдельном потоке. Т.е. что-то вроде этого:
type
TWT = class(TThread)
private
protected
procedure Execute; override;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
pTWT := TWT.Create(false);
end;
procedure TWT.Execute;
begin
m_Class1 := TClass1.Create();
m_Class1.DCOMConnect();
end;
Данный вариант работать перестал. Но заработал после добавленеия следующего кода в метод
т.е. для потока вызывается CoInitialize.
procedure TWT.Execute;
begin
if (CoInitFlags = -1) and (IsMultiThread) then
CoInitFlags := COINIT_MULTITHREADED; // Required for multithreaded
if Assigned(ComObj.CoInitializeEx) and (CoInitFlags <> -1) then
ComObj.CoInitializeEx(nil, CoInitFlags)
else
CoInitialize(nil);
m_Class1 := TClass1.Create();
m_Class1.DCOMConnect();
end;
Вопрос вот в чём: можно ли вызывать методы DCOM обекта из разных потоков не вызывая в каждом из них
m_FServer := CoTACSServer.CreateRemote(strRemoteComputerName); а вызвав лишь один раз и используя во
всех потоках?
... << RSDN@Home 1.1.3 beta 2 >>