2017-09-08 24 views
0

좋은 하루, everybady를 통과한다 'HRESULT 권한 부여()'할 수없는나는 '인터페이스 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이고 두 번째는 VARIANT 참조이며 세 번째는 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); 

, 쉽게 변형 및 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);