FORMS .NET NO VB6

JUAREZFC 13/05/2013 16:35:23
#423396
fala Pessoal, traquilo?

Desculpe por já chegar pedindo, mas como eu tinha uma conta muito antiga, ela não está mais ativa, tive que me cadastrar novamente, e, é um prazer novamente poder postar aqui.

Então pessoal, sem mais delongas, Preciso da ajuda de vocês.

Estamos migrando gradativamente (passos bem pequenos mesmo) nossa aplicação para .net. (c#)
é um sistema legado em vb6, bem complexo.
Porém surgiu a necessidade de algumas telas serem atualizadas neste produto legado, que surgiu a necessidade de usar as telas em .net para não perdermos muito tempo e também já começar a fazer com que o cliente se acostume a nova interface.

Alguns exemplos que eu tenho, e também testes, utilizam o interop toolkit da ms.

é Possivel utilizar este toolkit ou outra forma, para chamar os formularios no vb6, tendo em mente que estamos usando o visual studio 2012 ? Mesmo passando a compilação pra 2.0 não conseguimos chamar o formulario no vb6.

tem alguma forma nativa, sem o interoptoolkit para fazer isso? (fiz alguns testes com ComVisble(true), da runtime.interopservices mas falta alguma coisa, no vb6 me da o erro de activex não encontrado ou nao pode ser criado e por ai vai... o teste foi um form vazio, soh chamando o metodo Show.)

Só conseguimos chamar os formulários de exemplo do interop.

Obrigado desde já.
KERPLUNK 13/05/2013 17:02:08
#423397
A interoperabilidade e a visibilidade do objeto para o COM+ é essencial para rodar um form .NET sendo chamado de uma aplicação ActiveX(VB6). Mas o que você quer fazer é algo nada recomendado.
O que você deveria fazer(na minha opinião)
- Criar o framework com todo o CRUD da sua aplicação em .NET
- Fazer todo esse CRUD ser visível do VB6(ComVisible)
Então usar esse CRUD do seu VB6 e do .NET
JUAREZFC 13/05/2013 17:47:30
#423398
Entendo que a solução não é a melhor, mas o problema é o de sempre, o tempo que não temos pra poder fazer isso Agora.
Igual falei, estamos migrando mas o processo está bem lento ainda.

Existe este um formulário que precisa de algumas mudanças, que gerou uma necessidade de reformulação total do formulário,essa reformulação é exatamente o formulário existente no .net, e não queriamos ter que fazer tudo no vb6, de novo :(

Em suma, não existe forma simples de fazer a integração, certo ?
KERPLUNK 13/05/2013 17:51:54
#423399
Citação:

Em suma, não existe forma simples de fazer a integração, certo ?


Exatamente, não é uma coisa simples de ser feita, mas é possível...
OCELOT 13/05/2013 18:44:26
#423403
Na verdade é bem simples fazer isso, acredito que só não tenha como fazer com MDI child, e para ser feito de forma fácil você vai ter que usar Late Binding, o que significa não fazer referencia no VB6 e não ter intellisense

Você precisa criar o projeto no C# como sendo uma Class Library para ser gerada a dll, e basicamente o que precisa ser feito no código é colocar o atributo [ComVisible(true)] no seu form, não precisa mudar mais nada no projeto, não precisa marcar o Register for COM interop nas propriedades pois isso vai ter que ser feito manualmente.

Com a Dll compilada você vai ter que usar um programa chamado RegAsm.exe para registrar a dll, tipo o que se faz com as dlls do VB6 usando o regsvr32.exe

Esse programa fica na pasta onde o framework está instalado, geralmente em C:\Windows\Microsoft.NET\Framework\Numero da Versão

Quando registrar você precisa passar o parâmetro /codebase, então ficaria assim

regasm nomedasuadll.dll /codebase

Registrando ela só resta usar no VB6, por exemplo, considerando que o meu form se chama Form1 e está em um namespace chamado TesteInterop, em um botão você colocaria o código

Dim frm as Object
Set frm = CreateObject([Ô]TesteInterop.Form1[Ô])
frm.ShowDialog


Claro que isso serve apenas de quebra galho, pode ter algumas limitações como por exemplo não ser possível chamar o Show passando o form do VB como parâmetro para ser o owner do form do .Net e provavelmente você só vai conseguir passar os tipos básicos de variáveis do VB6 para o .Net
Faça seu login para responder