C # Implementar ligação tardia para código nativo
-
16-09-2019 - |
Pergunta
Estamos trabalhando com uma aplicação nativa existente (provavelmente escrito em VB) que carrega conjuntos e métodos de chamadas com "Late Binding." Não temos acesso ao seu código-fonte.
Queremos implementar essa interface em C #, e ter o aplicativo nativo chamar o nosso C # montagem.
Isto é algo que é possível?
É este algo que temos de fazer para além combinando os nomes de métodos e assinaturas de método para fazê-lo funcionar?
Solução 2
Estes são os passos necessários para fazê-lo funcionar:
- Mark sua classe [ComVisible (true)], e certifique-se de dar-lhe um atributo exclusivo [Guid]
- Match seu ProgId a sua classe que normalmente é MyNamespace.MyClass, mas você pode adicionar um atributo em sua classe para substituir esse bem
- Coloque o bom [DispId] atributos para cada método que será chamado
- Compilar sua montagem e regasm.exe run no seu conjunto
E voila! código nativo pode chamar o seu C # via "ligação tardia". Eu, é claro, teve que definir vários chaves do registro para fazer o meu applciation saber nativa como carregar a minha igreja, mas tudo está funcionando.
Outras dicas
Se você está tentando chamar o código .NET em VB6 a forma mais limpa seria para tornar o código C # aparecer como um objeto COM ao código VB6 - então sim, você precisaria para marcar o seu código C # como ComVisible
e garantir que parece que a interface COM existente.
Update: Aqui de um artigo para você começar.