Форум: "Основная";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизIHMTLDocument2.write Найти похожие ветки
← →
MetalFan © (2006-11-30 11:24) [0]как этот метод правильно вызывать?
в 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); <<- на этой строчке иногда вываливает AV, без нее все ок.но как тогда память освобождать?
end;
end;
подскажите, где косяк?!
← →
mailo (2006-11-30 16:28) [1]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;
← →
MetalFan © (2006-11-30 17:42) [2]>[1]
я все понимаю, но вопрос в другом вообщето)
мне ваш способ не нравится,
и меня интересует, почему не работает мой код
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.052 c