none
Interop vb6 dll em projeto asp.net RRS feed

  • Pergunta

  • Olá a todos...

    Tenho uma Dll de criptografia feita em VB6...

    Gostaria de utilizar a mesma em VB.Net e Asp.net...

    Adicionei uma referência a esta DLL em minha DLL .Net chamada MyLibrary... e então criei duas funções, crypt e decrypt, que consomem as funções da dll COM (vb6).

    Rodando no Visual Studio 2010, funciona perfeitamente.

    Quando atualizo para me webserver ISS 7.5, e tendo rodar o exemplo, obtenho o erro que segue abaixo:

    Em tempo:

    1-  Já registrei a DLL no servidor, na pasta SYSWOW e SYSTEM32 e a mesma registrou sem problemas.

    2 - Não quero usar a namespace security do .Net, pois preciso desta dll, pois a mesma vai continuar rodando em meu aplicativo desktop, feito em VB6.Descrição:
    Ocorreu uma exceção sem tratamento durante a execução da atual solicitação
    da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro
    e onde foi originado no código.

    Detalhes da Exceção:
    System.Runtime.InteropServices.COMException: Falha na recuperação de fábrica
    de classes COM do componente com CLSID {7527D4F1-AD82-4DB7-9649-AC1E728D5EF5}
    devido ao seguinte erro: 80040154 Classe não registrada (Exceção de HRESULT:
    0x80040154 (REGDB_E_CLASSNOTREG)).

    Erro de Origem:

    Exceção sem tratamento foi gerada durante a execução da atual
    solicitação da Web. As informações relacionadas à origem e ao local da exceção
    podem ser identificadas usando-se o rastreamento de pilha de exceção
    abaixo.

    Rastreamento de Pilha:
    [COMException (0x80040154): Falha na recuperação de fábrica de classes COM do componente com CLSID {7527D4F1-AD82-4DB7-9649-AC1E728D5EF5} devido ao seguinte erro: 80040154 Classe não registrada (Exceção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).]
       System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
       System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +117
       System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +247
       System.Activator.CreateInstance(Type type, Boolean nonPublic) +106
       SuperaWeb.Library.Crypto.Crypt(String clearText) in D:\M_Z\superaweb\AJAX EXT.NET 2.X\SuperaWeb\SuperaWeb.Library\Crypto.vb:43
       SuperaWeb.test.btnCrypt_Click(Object sender, EventArgs e) in D:\M_Z\superaweb\AJAX EXT.NET 2.X\SuperaWeb\SuperaWeb\test.aspx.vb:9
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +154
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3707
    

    Erro de Servidor no Aplicativo '/'.

    Falha na recuperação de fábrica de classes COM do componente com CLSID
    {7527D4F1-AD82-4DB7-9649-AC1E728D5EF5} devido ao seguinte erro: 80040154 Classe
    não registrada (Exceção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

    terça-feira, 18 de setembro de 2012 12:29

Respostas

Todas as Respostas

  • Gefferson,

    Não sei se é o mesmo caso, eu tenho um projeto com uma DLL escrita em código não gerenciado e a minha aplicação .NET estava compilada para ANY CPU. Quando a Máquina é 32bits tudo funciona, mas quando a máquina é 64bits e tenta carregar a DLL compilada para 32bits a rotina capota e com mensagem de erro nada amigavel. Quando compilei meu projeto .NET para ser espcífico de 32 bits tudo funcionou.

    A diferença é meu projeto .net é um Windows Service chamando uma DLL escrita em outra linguagem


    terça-feira, 18 de setembro de 2012 18:55
  • Olá Clayton

    Acredito que não seja isto, pois na minha máquina, que é 64 bits também, (windows 7), com o Visual Studio 2010 (portando, ISS Express) funciona muito bem...

    Mas obrigado pelo interesse.

    Alguém tem mais alguma dica?

    quarta-feira, 19 de setembro de 2012 11:11
  • Olá Clayton

    Acredito que não seja isto, pois na minha máquina, que é 64 bits também, (windows 7), com o Visual Studio 2010 (portando, ISS Express) funciona muito bem...

    Mas obrigado pelo interesse.

    Alguém tem mais alguma dica?

    Jefferson, eu sempre uso interop, mais é o seguinte veja se for no seu server 64 joga o arquivo na syswow e faz o registro para o caminho que está nessa pasta

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quarta-feira, 19 de setembro de 2012 12:38
    Moderador
  • Olá Seilor...

    Obrigado por seu post... não é isto também... já tinha registrado a dll no diretório SYSWOW do windows Server.

    Eu me dei conta que não tinha feito um aplicativo de testes apenas em vb.Net... só em Asp.Net...

    Fiz um .exe de testes em vb.net, compilei e instalei no servidor... rodou perfeitamente...

    Então, se alguém puder me dar uma dica... me parece que somente não está funcionando quando é no ISS 7.5 Server...

    Grato

    Gefferson

    quarta-feira, 19 de setembro de 2012 16:51
  • Ola Gefferson,

    Da uma olhada nesse caso, teria que criar um pool de aplicativo pra 32 bits no IIS.

    http://stackoverflow.com/questions/7051529/register-com-dll-with-iis7-5-regdb-e-classnotreg
    • Marcado como Resposta Harley Araujo quinta-feira, 20 de setembro de 2012 12:44
    quarta-feira, 19 de setembro de 2012 18:33