2010-02-05 3 views
3

표준 및 (다소) 지원되는 답변 중 하나는 지원을 사용하는 것입니다. Microsoft.VisualBasic.Compatibility 어셈블리에서을 지원하는 것이 좋습니다. 그러나 .NET 4.0에서는 "This API is now obsolete"입니다..NET 4.0에서 아이콘을 IPicture로 변환 하시겠습니까?

네, 거기에는 다양한 solutions가 있지만 Microsoft가이 방법을 폐기한다면 다른 "지원되는"대안이있을 것이라고 생각합니다.

답변

2

IPicture가 OLE 인터페이스이기 때문에이 API는 쓸모가 없다고 생각합니다. 이를 통해 마이크로 소프트가 원하지 않는 관리되지 않는 세계로 뛰어들 수 있습니다. 당신은 COM의 상호 운용성을 제공해야합니다 -

PICTDESC aDesc; 
aDesc.cbSizeofstruct = sizeof PICTDESC; 
aDesc.picType = PICTYPE_ICON; 
aDesc.icon.icon = aHIcon; 

IPicture * aPict = 0; 
OleCreatePictureIndirect(&aDesc, __uuidof(IPicture), TRUE, (void **) &aPict); 

유일한 어려움은 : 당신은 그럼 당신은 (코드가 C입니다 ++) OleCreatePictureIndirect이 핸들을 전달해야 IntPtr aHIcon = Icon.GetHicnFromIcon(yourIcon);

를 호출하여 동작을 재현 할 수 C++ 구조 및 함수 호출을 래핑하는 코드.

+0

"관리되지 않는 세계로 뛰어 들고 싶지는 않지만"기존 COM 서버 (.NET에서 사용할 수 있음)에는 아이콘에 OLE * IPicture *가 필요합니다. –

+0

@ Dan : 당신이 말했듯이, 당신은 ** OLD ** COM 서버를 다루고 있습니다. 그래서 당신은 쓸모없는 API가 필요합니다. –

+0

@Eduardo : COM 서버가 "System.Drawing.Icon"을 노출 할 수 있다고 생각하지 않습니다 ... 관리되지 않는 COM 클라이언트가 그런 것을 어떻게 처리합니까? –

관련 문제