我编写了一个DTS的自定义任务:Itest = interface(IDispatch)
    ['{490562A8-5938-4A5E-821A-AA55BE3B9C2B}']
    function Get_User: WideString; safecall;
    procedure Set_User(const Value: WideString); safecall;
    function Get_Descr: Integer; safecall;
    procedure Set_Descr(Value: Integer); safecall;
    property User: WideString read Get_User write Set_User;
    property Descr: Integer read Get_Descr write Set_Descr;
end;Ttest = class(TAutoObject, CustomTask, CustomTaskUI, PersistPropertyBag, Itest)
......
接口的所有函数均已实现
end;里面有User,Descr两个属性,正常情况下,存取是通过PersistPropertyBag来操作的,没有什么问题。但是如果你要复制这个任务的时候,它就会执行Get_Properties,需要你返回一个Properties。问题就出在这里:
function TTGAPS_DataSource.Get_Properties: Properties;
var
Provider: PropertiesProvider;
begin
Provider := CoPropertiesProvider.Create;
try
Result := Provider.GetPropertiesForObject(Self);
ShowMessage(Result.Item(1).Name);
ShowMessage(Result.Item(1).Value);
finally
Provider := nil;
end;
end;访问Result.Item(1).Name正常,但是访问Result.Item(1).Value就会出错。经过检查Result.Item(1).Get属性,发现为false,所以不能读(检查Set属性也为false,不能写)。这个get属性是只读的,不能改。现在请问:如何能让Get和Set属性为true,自己写的dts任务不能执行复制的操作。