2017-09-08 7 views
0

Guten Tag, everybady,Ich kann nicht 'HRESULT Autorisieren()' durch 'Schnittstelle IiTunes'

ich auf Windows7 arbeiten (64 Bit) und die Verwendung COM/OLE-Objekt "iTunesApp Class" versuchen. Dieses Objekt wurde mit iTunes installiert. Mein Code folgt

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); 
    } 

Then (pIiTunes-> Autorisieren (1, Daten, (BSTR *) ver);) Ich habe Ausnahme‘... Ausnahme von Adresse 0x000007FEFF4E4FCA (oleaut32.dll). ..Violation der Zugriffsrechte an der Adresse 0x000007FEFF4E4FCA ...‘

ich weiß nicht, was für pIiTunes-> Autorisieren() Parameter I

Antwort

0

setzen muss, weiß ich nicht, was ist der Wert von Parameter, die eingestellt werden müssen, aber ich kenne die Typen dieser Parameter.

Der erste ist ein int32, der zweite ist ein VARIANT Verweis, dritte ist ein Array von BSTR. VARIANTs müssen nach der Verwendung initialisiert und gelöscht werden, BSTRs müssen zugewiesen werden (ein BSTR ist nicht ein OLECHAR *) und nach der Verwendung freigegeben.

also jenseits der realen Semantik der Methode können Sie es so nennen:

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); 

Wenn Sie Visual Studio verwenden, gibt es kühle Compiler COM Support Classes, die Leichtigkeit VARIANT und BSTR Programmierung erheblich, da Sie umschreiben könnte all dies wie folgt aus:

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

Visual Studio bietet auch eine Bibliothek mit dem Namen ATL, die andere wrappers hat. Die Verwendung ist ähnlich:

CComVariant data; 
CComBSTR ver = L"[email protected]"; 
BSTR b = ver; 
pIiTunes->Authorize(1, &data, &b); 
Verwandte Themen