Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandre Carmo

[Resolvido] Chamar objeto por interface

Recommended Posts

Boa tarde

 

Pessoal estou criando formulário dinâmicos onde todos os componentes do form são criados em tempo real e todas suas funções também, esta quase tudo funcionando ok, é o seguinte todos componentes .net que criei rodou legal com suas chamadas, etc. Porém preciso também que seja criado nesse forma dinêmico um componente COM, tenti criar da forma que fiz com os outros mas não ____, ele não aceita ser chamado pelo form dinâmico, procurei na net e pelo que entedi ele tem que ser chamado por interface mas não entedi como criar, veja como estou chamadondo:

 

Na hora que crio o meu form já crio os objetos e chamado para o form:

Imports GrFingerXLib
....
''cria o form e chama dos controles
 Public Function criaForm(ByVal nome As String) As Form
    Dim f1 As New Form
    Dim botao As Button = criarbotao()
    Dim pic As PictureBox = criaPictureBox()
    Dim griaule As GrFingerXCtrl = fingerGriaule()

    f1.Text = nome.ToString
    AddHandler f1.Load, AddressOf Form_Load
    f1.Size = New Size(600, 600)
    f1.Controls.Add(botao)
    f1.Controls.Add(pic)
    f1.Controls.Add(griaule) ''aqui apresenta a mensagem de erro
    Return f1
  End Function

Private Function criarbotao() As Button ''cria botão
    Dim btn As Button = New Button() 'declara o botão
    btn.Size = New Size(130, 25) 'define o tamanho
    btn.Location = New Point(0, 0) 'define a localização
    btn.Text = "Sensor" 'define o texto
    AddHandler btn.Click, AddressOf btn_Click
    Return btn
  End Function
  Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) ''evento do botão
    MessageBox.Show("Botão foi clicado")
    
  End Sub
 Private Function criaPictureBox() As PictureBox
    Dim pic As PictureBox = New PictureBox
    pic.Size = New Size(200, 200)
    pic.Location = New Point(0, 50)
    pic.BorderStyle = BorderStyle.Fixed3D
    pic.Name = "PictureBox1"
    Return pic
  End Function

'' cria o componente co que já esta chamado nas referências e importado no inicio do código
Private Function fingerGriaule() As GrFingerXCtrl
    Dim griaule As New GrFingerXCtrl
    Return griaule
  End Function

Tudo tola se eu tirar a chamada

 

f1.Controls.Add(griaule)

 

O form vai ser criado em tempo de execução e vai criar os controles e carregar nele, porém quando eu adiciono a linha ele me apresenta o seguinte erro nela:

 

Unable to cast COM object of type 'GrFingerXLib.GrFingerXCtrlClass' to class type 'System.Windows.Forms.Control'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

Se eu usar esse componente arrastando para um form criado normalmente ele ____ mas em um forma criado em tempo real apresenta esse problema. Como posso chamar esse componente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde

Pessoal analisando mais a fundo, continuo pesquisando o problema acima e o problema final esta na chamada da seguinte linha:

Dim handle As System.Drawing.Image = Nothing

que fica dentro de uma class que é chamado na seguinte linha:

 

Dim griaule As New GrFingerXCtrl

 

Esse é o componente COM que estou tentando adicionar no meu form, logo a mensagem de erro informa que um componente COM não pode chamado algo da class system, mas pode ser chamado por uma interface, veja:

Unable to cast COM object of type 'System.__ComObject' to class type 'System.Drawing.Image'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

Só não achei como arrumar isso ainda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde

Pessoal consegui resolver, eram 2 problemas principais fora alguns ajustes mas o primeiro era que eu estava chamando o controle da dll e esquecendo de chamado o activex dela e o segundo era que eu estava carregando o activex em tempo de execução no form e ao invés de chamar ele eu estava chamado outro novo controle por isso não executava.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.