none
É possível carregar uma DLL de outra linguagens em uma aplicação ASP.NET? RRS feed

  • Pergunta

  • Bom dia!

    Preciso carregar uma dll (não sei em qual linguagem foi desenvolvida) de criptografia na minha aplicação ASP.NET.

    Estou recebendo o seguinte erro:

    "A reference "caminho.dll" could not be added. This is not a COM component".

    Existe alguma maneira de resolver isso?

    Obrigado.

    terça-feira, 4 de dezembro de 2012 13:15

Respostas

  • Consegui fazer funcionar, mas não em C#, apenas VB.NET:

            Declare Function criptografaSenha Lib "C:\\Java_com_banpara_tiquete_comuns_SenhaBanpara_criptografaSenha.dll" (ByVal strChave As String, ByVal strSenha As String) As Integer
    
            Public Shared Function Criptografar(strTexto As String) As String
                criptografaSenha (strTexto, strTexto) 'Parametro de saída.
                Return strTexto
            End Function

    Descobri que a função possui dois parâmetros, e não um. Este era o problema.

    Como descobri? Tentativa e erro...

    Obrigado.

    quinta-feira, 20 de dezembro de 2012 19:00

Todas as Respostas

  • clique no seu projeto e escolha add references qdo abrir a janela clique em browse e vá onde vc salvou a dll, selecione ela e pronto.

    Junior

    terça-feira, 4 de dezembro de 2012 13:23
  • clique no seu projeto e escolha add references qdo abrir a janela clique em browse e vá onde vc salvou a dll, selecione ela e pronto.

    Junior

    "A reference "caminho.dll" could not be added. This is not a COM component".
    terça-feira, 4 de dezembro de 2012 13:26
  • o problema é nessa dll, vc tem que ver com o criador dessa dll se é compatível, seu projeto é web ou windowsforms ?

    Junior

    terça-feira, 4 de dezembro de 2012 13:33
  • Não tenho acesso ao criador, esta DLL é de um projeto java que foi migrado para ASP.NET (e ela foi feita em outra linguagem).

    No java é possível efetuar a leitura da seguinte maneira:

    System.loadLibrary("DLL");

    Pronto, apenas com essa linha é possível ler a dll.

    Como posso fazer o mesmo efeito em ASP.NET?

    terça-feira, 4 de dezembro de 2012 13:46
  • acho que só é possível da mesma linguagem, vc tem acesso ao fonte ? se tiver vc pode converter.

    Junior

    terça-feira, 4 de dezembro de 2012 13:51
  • É possível sim, desde que você conheça a assinatura dos métodos. E estes métodos da dll sejam públicos.

    Como você falou que é usado em java, então você será capaz de ler em .net sim.

    Você terá que usar algo assim:

    [DllImport( dll_filename )]
    [public|private] static extern ret_type function( [type para, ...] );

    http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx

    http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=219

    • Sugerido como Resposta Danimar Ribeiro sexta-feira, 28 de dezembro de 2012 18:08
    terça-feira, 4 de dezembro de 2012 14:12
  • Veja como está (criei um win form de teste):

        public partial class Form1 : Form
        {
            [DllImport("Senha.dll")]
            public extern static string criptografaSenha(string s);
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                string senhaCriptografada = criptografaSenha("6666");
            }
        }

    Erro:

    Unable to find an entry point named 'criptografaSenha' in DLL 'Senha.dll'.

    terça-feira, 4 de dezembro de 2012 16:39
  • Unable to find an entry point named 'criptografaSenha' in DLL 'Senha.dll'.

    Não existe método dentro dessa dll ali. Quem criou essa dll?


    terça-feira, 4 de dezembro de 2012 16:53
  • Consegui resolver baixando o aplicativo "Dependency Walker".

    Ele me ajudou muito pois consegui pegar o nome dos métodos da DLL desconhecida, veja:

    Java_com_banpara_tiquete_comuns_SenhaBanpara_criptografaSenha

    É esse o método, porém agora está me gerando outro erro:

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

    Como resolver?

    terça-feira, 4 de dezembro de 2012 16:54
  • Agora você vai ter que passar os tipos de parametros corretos. Qualquer incompatiblidade entre o que você enviar e o que o método espera vai dar esse erro.
    terça-feira, 4 de dezembro de 2012 16:56
  • No java é passado string. veja como está:

            [DllImport("Senha", EntryPoint = "Java_com_banpara_tiquete_comuns_SenhaBanpara_criptografaSenha")]
            public extern static string criptografaSenha(string s);
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                string senhaCriptografada = criptografaSenha("6666");
                senhaCriptografada.ToString();
            }

    Não sei quem criou esta dll, ela é legada, não há como saber infelizmente, a mesma é antiga e o sistema java também, porém funciona.

    terça-feira, 4 de dezembro de 2012 17:23
  • Quando e uma COM vc deve instalar ela na sua maquina, depois ela vai aparecer para vc utilizar

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

    quarta-feira, 5 de dezembro de 2012 12:18
    Moderador
  • Essa DLL infelizmente não é COM.
    quarta-feira, 5 de dezembro de 2012 15:50
  • Consegui fazer funcionar, mas não em C#, apenas VB.NET:

            Declare Function criptografaSenha Lib "C:\\Java_com_banpara_tiquete_comuns_SenhaBanpara_criptografaSenha.dll" (ByVal strChave As String, ByVal strSenha As String) As Integer
    
            Public Shared Function Criptografar(strTexto As String) As String
                criptografaSenha (strTexto, strTexto) 'Parametro de saída.
                Return strTexto
            End Function

    Descobri que a função possui dois parâmetros, e não um. Este era o problema.

    Como descobri? Tentativa e erro...

    Obrigado.

    quinta-feira, 20 de dezembro de 2012 19:00