Comment obtenir une DIB implémentée dans une bibliothèque C ++ / COM dans un client .NET utilisant cet objet COM

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

  •  06-07-2019
  •  | 
  •  

Question

Nous avons un objet COM implémenté avec C ++ / ATL qui inclut une méthode qui renverra une DIB. Nous écrivons également une application .NET qui utilisera cet objet COM. Puisque nous écrivons les deux, nous avons la liberté de décider de la meilleure façon de renvoyer cette DIB à partir de l'objet COM. Pour clarifier, serait-il préférable de renvoyer un handle de fenêtre natif à une DIB ou à un tableau d'octets ou existe-t-il un autre moyen de passer facilement d'une DIB de Windows à un objet Image .NET? Et, en lien avec cette question: une fois que j'ai reçu ce DIB, comment puis-je l’obtenir dans un objet .NET Image?

Était-ce utile?

La solution

COM / OLE possède une interface standard pour la représentation d'images graphiques appelée IPicture (et sa version conviviale pour les scripts IPictureDisp ).

COM fournit une implémentation de ces interfaces pour vous. Vous pouvez en obtenir un pour vous en appelant OleCreatePictureIndirect ( ) . Vous venez de lui remettre une la structure PICTDESC avec le graphique que vous avez, et cela vous redonne une interface. Vous devriez pouvoir remettre cette interface au programme appelant. Cela rendra également votre objet compatible avec d'autres clients COM comme VB6.

De retour au pays .NET, vous pouvez transformer une image IP en image en utilisant Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage () .

Autres conseils

Consultez l'article DIB vers System.Bitmap . sur CodeProject. Il a le code pour convertir un fichier DIB en un fichier bitmap. L’idée est que la DIB est représentée par un IntPtr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top