2012-08-22 8 views
0

사실 연결된 장비 목록을 볼 수 있기를 원하는 작은 문제가 있습니다. MessageBox()의 첫 번째 위치에서보고 싶습니다.이 변형은 나에게 불쾌감을줍니다. (예 : ) ^^ ^) 여러 가지 방법을 시도했지만 결과가 없습니다.메시지 박스에 변형 유형 값 표시

IMoniker *tmpMonk=NULL; 
ULONG done; 
VARIANT varName; 
while(this->deviceClassEnum->Next(1,&tmpMonk,&done)==S_OK) 
{ 
    IPropertyBag *tmpBag=NULL; 
    tmpMonk->BindToStorage(0,0,IID_IPropertyBag,(void **)&tmpBag); 
    VariantInit(&varName); 
    checkIt(tmpBag->Read(L"FriendlyName",&varName,0)); 
      // this i wana see what is inside but huuuuuuuuuuuuuh 
    MessageBox(this->app,TEXT((LPCSTR)varName.bstrVal),"",NULL); 
    VariantClear(&varName); 
    tmpBag->Release(); 
} 

두 번째로 장치에서 다른 장치로 전환하는 방법. 메뉴 또는 목록

답변

3

MessageBox 대신 MessageBoxW으로 전화해야합니다. 그리고 캐스트를 제거하십시오. 그러면 다음과 같이 표시됩니다.

MessageBoxW(this->app, varName.bstrVal , L"", NULL); 

문자 인코딩에는 문제가 있습니다. COM에서 사용되는 문자열은 BSTR 유형이며 PWSTR/PCWSTR 유형과 동일하게 사용할 수 있습니다. 이것은 PCSTR과 호환되지 않습니다.

캐스트는 단순히 컴파일러에게 "이봐, 내가 뭘하는지 알아."라고 말한 것을 기억하십시오. 컴파일러의 메시지가 실제로 당신을 도우려고한다는 것을 제외하고, 당신은 그들에게 떠나라고 말했다. 다음에 그들에게 귀를 기울이십시오.

+0

thx tenfour 작동 내가 MessageBoxW 존재 했어 그 장치에서 다른 수 전환 할 수있는 컬렉션에서 그 이름을 넣어합니다. –

+0

Every/Most (?) Windows-API 함수는 두 가지 변종 * A 및 * W로 존재합니다. 프로젝트 설정에서 UNICODE가 정의되어 있는지 여부에 따라 Windows 헤더 파일은 MessageBoxW 또는 MessageBoxA로 "MessageBox"를 정의합니다. 그것은 사용자의 편의를위한 것이지만 항상 적절한 버전을 명시 적으로 호출 할 수 있습니다. –