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?

Foi útil?

Solução 2

Estes são os passos necessários para fazê-lo funcionar:

  1. Mark sua classe [ComVisible (true)], e certifique-se de dar-lhe um atributo exclusivo [Guid]
  2. Match seu ProgId a sua classe que normalmente é MyNamespace.MyClass, mas você pode adicionar um atributo em sua classe para substituir esse bem
  3. Coloque o bom [DispId] atributos para cada método que será chamado
  4. 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.

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