Я считаю, что этот API устарел, потому что IPicture является интерфейсом OLE. Работая с ним, вы погружаетесь в неуправляемый мир, который Microsoft не хочет, чтобы вы. Вы можете воспроизвести поведение, позвонив
IntPtr aHIcon = Icon.GetHicnFromIcon(yourIcon);
Затем вам нужно передать этот дескриптор OleCreatePictureIndirect (код находится на C ++):
PICTDESC aDesc;
aDesc.cbSizeofstruct = sizeof PICTDESC;
aDesc.picType = PICTYPE_ICON;
aDesc.icon.icon = aHIcon;
IPicture * aPict = 0;
OleCreatePictureIndirect(&aDesc, __uuidof(IPicture), TRUE, (void **) &aPict);
Единственная трудность - вам потребуется предоставить код взаимодействия COM для переноса структуры C ++ и вызова функции.