Como faço para usar Reg-Free COM para uma referência de dll vb6 em um projeto .net?

StackOverflow https://stackoverflow.com/questions/811894

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho tentado resolver esta questão por um longo tempo, e nada parece funcionar.

Eu tenho uma DLL COM escrito em VB6. Eu adicionar uma referência a esta DLL em .net, com as propriedades 'isoladas' e 'cópia local' definido como true na referência. Aparentemente, este é suposto para permitir reg-livre com.

Mas ele não funciona. Se eu tentar em outro computador, ou cancelar o registro da DLL com regsvr32, tentando acessar a DLL gera uma exceção (essencialmente dizendo que a classe COM desejado não existe). Os arquivos DLL e manifestas estão na mesma pasta que o EXE, mas aparentemente apenas totalmente ignora-los.

O que estou fazendo de errado? Eu li uma tonelada de artigos dispersos sobre este, mas nenhum deles me dar uma solução de trabalho. Eu já consertou com visual studio sem sucesso. Eu já consertou uma pequena quantidade com make-meu-manifesto, mas não deu certo (mesmo em um projeto de teste).

Foi útil?

Solução

Eu estava criando e usando a classe com em um segmento não-ui. Aparentemente Reg-Free com a DLLs do VB6 não funciona nessa situação. Esse código de teste demonstra que:

Private Sub RunTest() Handles Button1.Click
    Try
        Dim x As New RegTestProject.RegTestCall
        MsgBox(x.RegTestFunction())
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Private Sub RunThreadedTest() Handles Button2.Click
    'fails if reg-free COM is used'
    Dim t As New Threading.Thread(AddressOf RunTest)
    t.Start()
End Sub

Quando eu executo isto com a DLL registado normalmente, ambos os testes bem sucedidos. Se eu usar reg-livre com, o teste de rosca falha mesmo que o teste normal, ainda bem-sucedido. Parece que este vai ser um grande dor para o trabalho-around.

Outras dicas

Eu tenho certeza de que quando você faz referência a componentes COM desta forma, o COM importação componente acontece toda vez que você construir. Isso significa que o componente COM deve ser registrado de forma tradicional em todas as máquinas do projeto será construído em.

Aqui está um ligação que descreve o uso de registro livre de interoperabilidade. Se você já fez isso por favor poste o seu arquivo de manifesto. Você pode ter um erro de digitação sua falta.

Editar

Apenas um pensamento pode ser mais simples de apenas registrar a DLL pela primeira vez o aplicativo é executado em uma máquina nova. Inscrição gratuita com interopt só está disponível no Windows XP e mais recentes por isso, se a sua segmentação quaisquer dinossauros lá fora, não vai funcionar.

Aqui está um trecho da href="http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic10" rel="nofollow noreferrer"> Solução de problemas seção de um MSDN artigo em free-reg cOM. Desculpas se você já viu isso. A boa notícia é que já fazem parte do caminho através das etapas. Ele sugere reproduzir o problema no Windows Server 2003 (talvez com Virtual PC ?) e, em seguida, o log de eventos deve ajudar.

Primeiro obtenha ... o seu cliente trabalhar com um servidor registrado; em seguida, cancelar o registro o servidor e verificar se o erro mensagem é o que você esperava; e finalmente ... artesanato e manifesto de implantação arquivos. Desta forma, a resolução de problemas esforços ... será confinado à estrutura de seus arquivos de manifesto (e a incorporação correcta do conjunto manifesto se você optar por fazê-lo).

Ao solucionar problemas sem registro questões COM, o Visualizador de eventos no Windows Server 2003 é seu amigo ... olhar no log de eventos do sistema para eventos do servidor COM. Eu não sugiro que você olhar para o Windows XP log de eventos ... ele vai invariavelmente contêm uma mensagem ... que não ajuda identificar o problema.

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