写COM程序实现了一个接口,其中有个接口函数传入var List: PSafeArray参数,需要我往这个数组里写入一些字符串,但是昨天搞了一天,不是写不进去就是变成乱码,求高手指导,附源码:procedure TSmartdoc.PopulateListOrComboContent(ControlID: SYSINT;
const ApplicationName: WideString; LocaleID: SYSINT; const Text,
Xml: WideString; const Target: IDispatch;
const Props: ISmartDocProperties; var List: PSafeArray; var Count,
InitialSelected: SYSINT);
var
plist: psafearray;
rgsabound: array [0..0] of SAFEARRAYBOUND;
i: Integer;
name: OleVariant;
temp: HRESULT;
begin
count := 2;
InitialSelected := -1;
rgsabound[0].lLbound := 1;
rgsabound[0].cElements := 2;
plist := SafeArrayCreate(VT_VARIANT, 1, rgsabound);
i := 1;
name := 'test';
temp := SafeArrayPutElement(plist, i, name);
if (temp = S_OK) then
begin
ShowMessage('S_OK');
end
SafeArrayCopy(plist, list);
end;
const ApplicationName: WideString; LocaleID: SYSINT; const Text,
Xml: WideString; const Target: IDispatch;
const Props: ISmartDocProperties; var List: PSafeArray; var Count,
InitialSelected: SYSINT);
var
plist: psafearray;
rgsabound: array [0..0] of SAFEARRAYBOUND;
i: Integer;
name: OleVariant;
temp: HRESULT;
begin
count := 2;
InitialSelected := -1;
rgsabound[0].lLbound := 1;
rgsabound[0].cElements := 2;
plist := SafeArrayCreate(VT_VARIANT, 1, rgsabound);
i := 1;
name := 'test';
temp := SafeArrayPutElement(plist, i, name);
if (temp = S_OK) then
begin
ShowMessage('S_OK');
end
SafeArrayCopy(plist, list);
end;
var
p: Pointer;
begin
SafeArrayAccessData(pList, p);
WideStringArray(p)[0] := '张三';
WideStringArray(p)[1] := '李四';
WideStringArray(p)[2] := '王五';
SafeArrayUnaccessData(pList);
p := nil;
end;