Pergunta

Desta forma mentiras loucura, eu sei.

Eu tenho um (o código fonte para que eu não tenho acesso) executável que eu gostaria de estender via .NET. É um executável nativo, então eu precisaria injetar um anfitrião CLR, a fim de fazer isso. Meu ideia básica é a de proporcionar scripts do funcionalidade como por meio de uma linguagem .NET (C #, por exemplo) e proporcionar ganchos no executável alvo para os scripts de manipular, e vice-versa.

Eu sei que vou precisar usar várias técnicas para conseguir isso - injeção de DLL, alguns injeção ASM tempo de execução, etc., mas o que eu gostaria de saber é o seguinte: é o que eu estou falando é possível? Melhor ainda -? Alguém já fez algo assim antes

Foi útil?

Solução

Você pode fazer isso usando interoperabilidade COM, se o seu executável nativo é capaz de usar objetos COM. Se você registrar seu .NET assembly para interoperabilidade, em seguida, seu executável nativa pode usar suas classes .NET apenas como "comum" COM objetos, e quando o primeiro é criado ele vai girar a CLR dentro do processo nativo. De forma similar, se você pode expor COM objetos do executável nativo, então você pode usá-los em seu código .NET se você criar uma interoperabilidade de montagem (ou mesmo sem uma biblioteca de tipos, se você usar somente IDispatch).

Os princípios são simples, mas eu estou apenas arranhando a superfície - para um projeto sério como este que você precisa de uma referência séria. Eu recomendo .NET e COM, O guia completo Interoperabilidade por Adam Nathan. É um grande livro que não deixa muito por dizer, e também tem um monte de informações sobre a grande projetar as classes .NET e COM a interoperabilidade de forma limpa. Ele também explica como hospedar o CLR diretamente dentro de um aplicativo nativo, mas essa opção pode não ser prático sem acesso ao código-fonte. Eu definitivamente começar com a rota de interoperabilidade COM, e somente sediar a CLR nativamente se você não tem outra opção.

Outras dicas

Nós realmente fazer algo muito semelhante para uma estrutura de automação. Você pode querer dar uma olhada no href="http://easyhook.codeplex.com/" rel="nofollow" title="EasyHook"> projeto no CodePlex. Sua tem uma tonelada de características interessantes, incluindo um construído em IPC Communicator para comunicação entre processos. É necessário um pouco de trabalho perna, mas deve fazer exatamente o que você está procurando.

scroll top