2017-09-08 8 views
0

良い一日を通じて 'HRESULT承認()' することはできませんeverybady、私は、 'インタフェースIiTunes'

私はのWindows7(64ビット)上で動作し、使用COM/OLEオブジェクト "iTunesAppクラス" をしてみてください。このオブジェクトはiTunesアプリケーションとともにインストールされています。 私のコードは、次に

HRESULT hr; 
    CLSID clsid; 
    IiTunes *pIiTunes = nullptr; 
    //Apple.iTunes 
    CLSIDFromProgID(OLESTR("iTunes.Application.1"), &clsid); 
    hr = CoCreateInstance(clsid, nullptr, CLSCTX_LOCAL_SERVER, __uuidof(IiTunes), reinterpret_cast<LPVOID *>(&pIiTunes)); 
    if (pIiTunes != nullptr) 
    { 
     VARIANT data[16]; 
     OLECHAR ver[4096] = L"[email protected]"; 
     pIiTunes->Authorize(1, data, (BSTR*)ver); 
    } 

に従っている()pIiTunes->承認(1、データ、(BSTR *)版;)私はアドレス0x000007FEFF4E4FCA(のOleaut32.dll)から例外」...例外を持っています。アドレス0x000007FEFF4E4FCAでのアクセス権の..Violation ...」私は私が私にはわからない

答えて

0

を設定する必要があります)pIiTunes->承認(のためにどのパラメータを知らない

のものですこれらのパラメータのタイプを知っています。

最初はint32であり、2番目はVARIANTの参照です.3番目はBSTRの配列です。使用後にVARIANTを初期化してクリアする必要があります.BSTRを割り当てる必要があります(BSTRはではなく、 OLECHAR *です)、使用後に解放してください。

ので、方法の本当の意味論を超えて、あなたはこのようにそれを呼び出すことができます。

VARIANT data; 
VariantInit(&data); // undercovers, this will just zero the whole 16-bytes structure 

// ... do something with data here 

BSTR ver = SysAllocString(L"[email protected]"); // you should check for null -> out of memory 
pIiTunes->Authorize(1, &data, &ver); 

// always free BSTRs and clear VARIANTS 
SysFreeString(ver); 
VariantClear(&data); 

Visual Studioを使用する場合は、書き換え可能性があるので、容易にVARIANTとBSTRが大幅にプログラミングすることをクールCompiler COM Support Classesが存在しますこのように、すべての本:

_variant_t data; 
_bstr_t ver = L"[email protected]"; 
BSTR b = ver; 
pIiTunes->Authorize(1, &data, &b); 

Visual Studioは、他のwrappersを持ってATLと呼ばれるライブラリを提供します。それらを使用することは同様です:

CComVariant data; 
CComBSTR ver = L"[email protected]"; 
BSTR b = ver; 
pIiTunes->Authorize(1, &data, &b); 
関連する問題