Preciso aprender COM para o meu projeto atual. Sou novato e não consegui encontrar bons pontos de partida para o COM. Eu estive pesquisando no MSDN e pesquisando no Google ... Encontrei alguns artigos interessantes no codeproject.com, mas não estou satisfeito. Por que usamos o COM? Por que isso existe? Em que lugares existe? ..... e assim por diante .. Então, por favor, diga-me onde posso encontrar respostas para essas perguntas?
13
Respostas:
Aprender o IUnknown é o primeiro passo.
Uma boa interface COM adequada para o estudo de iniciantes é a interface IStream. Você pode praticar o COM implementando a interface IStream usando vários tipos de maneiras de armazenar dados.
Adicionado 2012/09/28:
Após a invenção do mecanismo COM, as pessoas da Microsoft descobriram que esses mecanismos abrem as portas para truques incomuns de programação que não são ortodoxos. No nível mais baixo,
IUnknown.QueryInterface
é apenas um método; pode fazer qualquer coisa. Esses truques tornam a COM intimidante para os alunos, porque podem invalidar o raciocínio básico que pode ser emprestado da OOP.A documentação da Microsoft no MSDN gasta muito tempo dizendo "COM não é ..." ou "Não faça suposição", explicando como esses truques incomuns podem quebrar seu código.
Os designers de COM usam o Princípio de Substituição de Liskov (o "L" no SOLID ) para garantir que suas múltiplas interfaces e o uso de truques não invalidem o raciocínio básico de OOP ou a operação do programa.
Se o seu projeto não usar esses truques, não há problema em ver o COM apenas do ponto de vista do OOP. Se o seu projeto usar esses truques, você precisará ver o COM como código auto-modificável.
fonte
O principal motivo do COM é fornecer uma interface de comunicação orientada a objetos entre um aplicativo e outros aplicativos e dlls que podem viver em diferentes espaços de memória e entre objetos que podem ter diferentes representações internas de objetos.
Algo para lembrar ao aprender COM é que, na época, o C ++ era o rei e os aplicativos chamados dll usando C. Não havia ABI comum (como @rwong diz) e o COM era a solução da Microsoft.
Provavelmente vale a pena dar uma olhada na ATL (Active Template Library) para visual studio, o que facilita um pouco o uso do COM também.
Alguns livros que achei úteis na época
http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1
http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4
hth
fonte
Eu aprendi originalmente sobre COM no livro Learning DCOM (DCOM é apenas uma extensão do COM, o livro é principalmente sobre COM). Ele tem mais de dez anos e deve ser barato se você o usar (já que o COM não está mais exatamente quente, nem mesmo no mundo da Microsoft, embora ainda seja usado para interoperabilidade).
O principal motivo da existência do COM é facilitar o desenvolvimento baseado em componentes, o que basicamente significa que, em vez de vincular bibliotecas ao compilar seu código, você faz referência a uma interface (a descrição de como se comunicar com um componente externo) e usa alguma implementação de quando você implanta. Está subjacente à maior parte da tecnologia da Microsoft.
O sistema oferece suporte a alguns recursos que eram interessantes antes de tudo ser gerenciado (como contagem de referência e auto-descrição (por meio do IDispatch)).
fonte
COM é um padrão criado nos anos 90 para permitir que diferentes partes de software conversem entre si. O mais importante é o padrão binário que permite que um software crie ou ligue a um objeto e, em seguida, chame a interface. Isso permite que você faça coisas como criar uma DLL em C ++, que pode ser chamada por uma página ASP (Objetos COM), ou criar um controle no Delphi, que você pode colocar em uma caixa de diálogo VB (controles ActiveX) ou planilha do Excel. Quando você cola uma imagem no Word, ele também usa COM, incorporando um aplicativo separado ao Word. Menos popular é o DCOM, que é para chamar objetos remotos, geralmente existem maneiras mais simples de fazer isso.
Então, o Com / ActiveX / DCOM era muito popular há 10 anos com VB, VBA, C ++ / ATL, Delphi. O Dotnet é muito mais simples e o C # substituiu a maioria dos usos de COM e VB, etc.
Ainda existem muitas interfaces COM existentes que você pode querer chamar de um aplicativo dotnet ou Java ou C ++. (Você não diz)
Se você precisar chamar interfaces COM, o VB é a maneira mais simples de fazer isso. No Dotnet 4.0, o C # possui a palavra-chave dinâmica, que facilita a chamada de interfaces IDispatch, o que provavelmente é uma ótima solução.
Se você precisa conhecer muitos detalhes, realmente precisa usar C ++ e ATL, chame as APIs C como CoCreateInstance. Evite isso se você puder, como sua tecnologia antiga e não for muito útil, siga as recomendações acima.
Não sei ao certo qual software de monitoramento você está procurando, mas provavelmente estará disponível através das classes System.Management no dotnet.
fonte
Os itens a seguir podem ser úteis COM overviewM:
http://www.youtube.com/watch?v=-uodiz25YNE
http://progtutorials.tripod.com/COM.htm
O primeiro vídeo fala sobre a idéia geral de criar Componentes Binários para reutilizar códigos escritos em diferentes idiomas (independentes do idioma) e estão em diferentes máquinas (processos) (independentes do local / transparentes). Essa tecnologia é usada em algumas empresas de software para integrar-se a outros softwares (empresas) em vez de comprar seus softwares e incorporá-los a eles próprios ou escrever os códigos do zero em seus sistemas.
Essa tecnologia possui três versões diferentes (implementações):
OLE / COM / DCOM / ActiveX para desenvolvedores de C ++ (ATL é usado para facilitar o trabalho do programador)
Desenvolvedores JavaBeans / RMI / EJB para Java
CORBA / IIOP
Pense nisso como uma tecnologia que é útil quando você tem seu software escrito em Java e deseja adicionar uma funcionalidade que já existe em um pacote, mas que está escrita em C ++ e, talvez, esteja localizada em uma máquina diferente e não em sua máquina local. Como você chama "new", como você cria objetos e chama métodos a partir deles?
Os seguintes livros que vi pessoas que codificam COM têm um deles em suas estantes:
Workshop do desenvolvedor para COM e ATL 3.0
Inside Com
COM essencial
fonte