![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IHMTLDocument2.write [D6, WinXP]
MetalFan © (2006-11-30 11:24:00)как этот метод правильно вызывать?
в MSDN есть пример:
IHTMLDocument2 *document; // Declared earlier in the code
HRESULT hresult = S_OK;
VARIANT *param;
SAFEARRAY *sfArray;
BSTR bstr = SysAllocString(OLESTR("Written by IHTMLDocument2::write()."));
// Creates a new one-dimensional array
sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
if (sfArray == NULL || document == NULL) {
goto cleanup;
}
hresult = SafeArrayAccessData(sfArray,(LPVOID*) & param);
param->vt = VT_BSTR;
param->bstrVal = bstr;
hresult = SafeArrayUnaccessData(sfArray);
hresult = document->write(sfArray);
cleanup:
SysFreeString(bstr);
if (sfArray != NULL) {
SafeArrayDestroy(sfArray);
}
на Delphi делаю так:
function GetHTMLDoc2FromString( const AStr: string ): IHTMLDocument2;
var
lSfArr: PSafeArray;
lVar: PVariant;
lWS: WideString;
begin
Result := CoHTMLDocument.Create as IHTMLDocument2;
lSfArr := SafeArrayCreateVector(VT_VARIANT, 0, 1);
if lSfArr nil then
begin
SafeArrayAccessData( lSfArr, Pointer(lVar) );
lWS := AStr;
TVarData(lVar^).VType := VT_BSTR;
TVarData(lVar^).VOleStr := @lWS[1];
SafeArrayUnaccessData( lSfArr );
Result.write(lSfArr);
//SafeArrayDestroy(lSfArr);
MetalFan (2006-11-30 17:42:00) [1]>[1]
я все понимаю, но вопрос в другом вообщето)
мне ваш способ не нравится,
и меня интересует, почему не работает мой код
mailo (2006-11-30 16:28:00) [2]var v: Variant;
begin
v := VarArrayCreate([0, 1], varVariant);
v[0]:='Written by IHTMLDocument2::write().';
(Webbrowser1.Document as IHTMLDocument2).Write(PSafeArray(TVarData(v).VArray));
(Webbrowser1.Document as IHTMLDocument2).close;
end;