Come ottenere un DIB implementato in una libreria C ++ / COM in un client .NET usando quell'oggetto COM

StackOverflow https://stackoverflow.com/questions/265967

  •  06-07-2019
  •  | 
  •  

Domanda

Abbiamo un oggetto COM implementato con C ++ / ATL che include un metodo che restituirà un DIB. Stiamo anche scrivendo un'applicazione .NET che utilizzerà questo oggetto COM. Poiché stiamo scrivendo entrambi, abbiamo la libertà di decidere il modo migliore per restituire questo DIB dall'oggetto COM. Per chiarire, sarebbe meglio restituire un handle di Windows nativo a un DIB o un array di byte o esiste un altro modo per trasferire facilmente un DIB di Windows in un oggetto .NET Image? E, in relazione a quella domanda: una volta che ho restituito DIB come posso farlo in un oggetto .NET Image?

È stato utile?

Soluzione

COM / OLE ha un'interfaccia standard per la rappresentazione di immagini grafiche chiamata IPicture (e la sua versione compatibile con gli script IPictureDisp ).

COM fornisce un'implementazione di queste interfacce per te. Puoi farlo per crearne uno chiamando OleCreatePictureIndirect ( ) . Ti basta consegnare una struttura PICTDESC con il grafica che hai, e ti restituisce un'interfaccia. Dovresti essere in grado di restituire l'interfaccia al programma chiamante. Ciò renderà anche il tuo oggetto compatibile con altri client COM come VB6.

Di nuovo in .NET land puoi trasformare un'immagine IP in un'immagine usando Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage () .

Altri suggerimenti

Dai un'occhiata all'articolo DIB a System.Bitmap su CodeProject. Ha il codice per convertire da DIB a Bitmap. L'idea è che il DIB sia rappresentato usando un IntPtr.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top