Como obter um DIB implementado em uma biblioteca C ++ / COM em um cliente .NET usando esse objeto COM

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Temos um objeto COM implementado com ++ / ATL C que inclui um método que irá retornar um DIB. Também estamos escrevendo um aplicativo .NET que vai usar esse objeto COM. Uma vez que estamos escrevendo ambos, temos a liberdade de decidir a melhor forma de devolver este DIB do objeto COM. Para esclarecer, seria melhor para retornar um identificador do Windows nativo para um DIB ou um array de bytes ou há alguma outra maneira de facilmente a transição de janelas DIB em um objeto .NET imagem? E, em relação a essa questão: uma vez que tenho esse DIB voltou como posso obtê-lo em um objeto .NET Imagem

?
Foi útil?

Solução

COM / OLE tem uma interface padrão para representar imagens gráficas chamados IPicture (e sua versão para scripting IPictureDisp ).

COM fornece uma implementação dessas interfaces para você. Você pode obtê-lo a construir um para você chamando OleCreatePictureIndirect ( ) . Você apenas entregar-lhe um PICTDESC estrutura com o gráfico que você tem, e dá-lhe cópias de uma interface. Você deve ser capaz de entregar essa interface de volta para o programa de chamada. Isso também irá fazer o seu objeto compatível com outros clientes COM como VB6.

De volta ao .NET terra que você pode transformar um IPicture numa imagem com Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage () .

Outras dicas

Tenha um olhar para o artigo DIB para System.Bitmap em CodeProject. Ele tem o código para converter de um DIB a um Bitmap. A ideia é que o DIB é representado usando um IntPtr.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top