FORMS .NET NO VB6
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á.
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á.
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
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
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 ?
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 ?
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...
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
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