ACESSAR FORM VB6 EM C#

VALTERRODRIGUES 23/10/2023 16:04:39
#501827
Senhores boa tarde, alguem ja necessitou acessar um formulario de vb6 no c#? eu já fiz a implementacao ( show ) em uma classe ( dll ) , entao tenho a seguinte situacao .. xpto.classeX e a funcao se chama Show () entao ao meu entender ficaria mais ou menos o seguinte..
dynamic cadastroXpto= Activator.CreateInstance(Type.GetTypeFromProgID("xpto.classeX"));
cadastroXpto.show()

O que acontece é que ele " acha e instancia a classe " , não dá erro, só finaliza o processo sem mensagem de erro algum. algum amigo tem um algoritimo para isso? Desde ja agradeço.
KERPLUNK 25/10/2023 20:40:31
#501829
Eu to reformando um fusca. Fui num ferro-velho e comprei um motor de arranque de um Corola. Daí cheguei em casa e tirei o motor de arranque da Montana, e agora to tentando colocar o motor de arranque do Corola na Montana e o da Montana no Fusca.
A pergunta é: porque faria uma coisa dessas???
DS2T 31/10/2023 17:48:35
#501838
Alterado em 31/10/2023 17:48:49 Vou te passar o passo-a-passo do que funcionou comigo.

1 - Criei o projeto no VB6 e depois fui em propriedades e mudei o tipo dele para ActiveX DLL
2 - Aproveitei e coloquei o Startup para None
3 - Criei um Class Module chamado Class1 e coloquei o seguinte conteúdo:

Public Sub AbrirFormulario()
Form1.Show vbModal
End Sub

Repare que o vbModel é importante. Caso contrário, ele vai dar um erro:

"Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control, or Property Page" na hora de chamar o método do .NET Windows Form.

4 - Registra a DLL usando (abra o prompt em modo administrador):

regsvr32 suaDLL.dll

5 - Vá no Solution Explorer da sua aplicação .NET, clique com o botão direito no projeto e vá em Add -> Add COM Reference... (Pode variar um pouco de acordo com a versão do Visual Studio). Procure a DLL e adicione ao projeto
6 - Lembre-se que sua aplicação que o VB6 gerou a dll em 32 bits. Você precisará que sua aplicação seja 32 bits também, então precisará mudar nas propriedades do projeto o Platform target para x86.
7 - Agora é só ser feliz e usar algo assim:

Project1.Class1 myclass = new Project1.Class1();
myclass.AbrirFormulario();
Faça seu login para responder