Я использую OmniThreadLibrary в приложении Delphi 2007, которое использует глобальный пул потоков для выполнения некоторых операций с файлами (мне нужно попытаться убедиться, что они выполняются в определенном порядке).
У меня есть содержимое только что созданного файла Ini, который хранится в TStringList.
Затем я передаю TStringList экземпляру TOmniTask.
class procedure saveIniFile(const iniFile: TStringList);
var
task : IOmniTaskControl;
begin
task := CreateTask(saveIniFileTask, 'saveIniFile')
.SetParameter('iniFile', iniFile)
.Unobserved
.Schedule;
end;
Я не могу понять, как получить TStringList в экземпляре TOmniTask.
class procedure saveIniFileTask(const task: IOmniTask);
var
iniFile: TStringList;
begin
iniFile := task.Param['iniFile'];
end;
Вышеприведенное вернет ошибку:
Incompatible types: 'TStringList' and 'TOmniValue'
Я пробовал приведение типов:
iniFile:= TStringList(task.Param['iniFile'].AsObject);
Но получите ошибку компилятора:
F2084 Internal Error: C4310
Я использую OmniThreadLibrary версии 3.0 — я не могу скомпилировать 3.03b в D2007.
Если @gabr о: Отличная работа OmniThreadLibray, спасибо.
Internal Error
— это ошибка в компиляторе, и она не должна была произойти, что бы вы ни делали. Компилятор явно запутался. Что произойдет, если вы сделаетеmyObject := task.Param['iniFile'].AsObject;
, а затемiniFile:= myObject as TStringList;
? - person 500 - Internal Server Error   schedule 19.09.2014task.Param['iniFile'].AsObject<TStringList>
. - person gabr   schedule 20.09.2014