0

これらの例では、ID tab_form_1の内容を出力したいと考えています。これらのサンプルでtab_form_1の内容を出力しようとすると、lpOleCommandTarget は CComptr を使用してインターフェイスを照会しているときに NULL になります。

この問題を解決するには?

サンプル

    IHTMLDocument2 *pDoc;
GetDHtmlDocument(&pDoc);


CComPtr<IHTMLElement2> spControl;       
if(GetElementInterface(_T("tab_form_1") ,&spControl) != S_OK)
    return; 

//ole command target
LPOLECOMMANDTARGET lpOleCommandTarget = NULL;
spControl->QueryInterface(IID_IOleCommandTarget,(void**)&lpOleCommandTarget);ASSERT(lpOleCommandTarget);
//lpDispatch->Release();

if(lpOleCommandTarget == NULL) return;

//prepare header
CString header   = _T("Project Path: &w");

VARIANT     header_variant;
VariantInit(&header_variant);
V_VT(&header_variant)   = VT_BSTR;
V_BSTR(&header_variant) = CString(header).AllocSysString();

//prepare footer
CString footer   = _T("&d &t&b Page&p of &P");

VARIANT     footer_variant;
VariantInit(&footer_variant);
V_VT(&footer_variant)   = VT_BSTR;
V_BSTR(&footer_variant) = CString(footer).AllocSysString();

//prepare header footer safe arrray
SAFEARRAYBOUND  parameter_array_bound[1];
SAFEARRAY       *parameter_array = NULL;

parameter_array_bound[0].cElements = 2;
parameter_array_bound[0].lLbound   = 0;

parameter_array = SafeArrayCreate(VT_VARIANT,1,parameter_array_bound);

//HRESULT hr;
long index;

index = 0;
HRESULT hr    = SafeArrayPutElement(parameter_array,&index,&header_variant);

index = 1;
hr    = SafeArrayPutElement(parameter_array,&index,&footer_variant);

VARIANT parameter;
VariantInit(&parameter);
V_VT(&parameter)    = VT_ARRAY | VT_BYREF;
V_ARRAY(&parameter) = parameter_array;

// print contents of web browser control
lpOleCommandTarget->Exec(NULL, OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, &parameter,NULL);

//clear all variants
VariantClear(&header_variant);
VariantClear(&footer_variant);
if (parameter_array != NULL) {
    SafeArrayDestroy(parameter_array);
}

lpOleCommandTarget->Release();
4

1 に答える 1