? задание строкового свойства из Delphi -
PDLCSSetPropertyEx
Шимолин
Сергей; 8.9.03
Из Delphi работаю с ODK-функциями PDLCSSetPropertyEx,
PDLCSGetPropertyEx. При доступе к числовым свойствам всё
отрабатывает нормально, при работе со строковыми свойствами
какие-то проблемы.. Если кто работал - киньте работающий
примерчик.
Спасибо.
Re: ? задание строкового свойства из Delphi -
PDLCSSetPropertyEx
Alexis; 8.9.03
BSTR bstr=::SysAllocString(L"Ops!");
PDLCSSetPropertyEx(lpszProjectName,lpszPictureName,lpszObjectName,lpszPropName,VT_BSTR,&bstr,0,NULL,&wccError);
::SysFreeString(bstr);
Так пробовал?
Re: ? задание строкового свойства из Delphi -
PDLCSSetPropertyEx
Шимолин
Сергей; 9.9.03
У меня вобщем-то проблема была в вызове функции на pascal`e, а в
документации все на C. Но всё равно спасибо, ответ навел на мысль -
тип VT_BSTR на Delphi заменяется на WideString, а я работал с
обычным String. Заработало всё вот так:
var
s : WideString;
begin
PDLCSGetPropertyEx( pchar(ProjectName),
PAnsiChar(Form1.CurrPictureName), lpInfoStruct.szObjectName,
'Позиция', varOleStr, @s, 0, nil, @Error)
end;
И насчёт выделения памяти: здаётся мне специально выделять память
не надо -
BSTR bstr=::SysAllocString(L"Ops!");
В документации написано:
For types which have a buffer (e.g. BSTR), the buffer is allocated
by the function and must be cleared afterwards by the calling
application.
Т.е. память выделяется внутри функции, а вот освобождать её как раз
должны мы.
Re: ? задание строкового свойства из Delphi -
PDLCSSetPropertyEx
Alexis; 9.9.03
В дока много чего написано :))
BSTR все равно надо инициализировать...
BSTR bstr=::SysAllocString(NULL);
PDLCSGetPropertyEx(...,VT_BSTR,&bstr...);
::SysFreeString(bstr);
Re: ? задание строкового свойства из Delphi -
PDLCSSetPropertyEx
Alexis; 9.9.03
А хотя можно и не инициализировать... GetProperty сам все
сделает...
Кстати, наскоко я помню не все строковые свойства VT_BSTR,
некоторые VT_LPSTR...