Usuário com melhor resposta
É possível carregar uma DLL de outra linguagens em uma aplicação ASP.NET?

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.
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.
- Marcado como Resposta Seilor Bonancio JuniorModerator quinta-feira, 27 de dezembro de 2012 15:43
Todas as Respostas
-
-
-
-
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?
-
-
É 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
-
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'.
-
-
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?
-
-
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.
-
-
-
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.
- Marcado como Resposta Seilor Bonancio JuniorModerator quinta-feira, 27 de dezembro de 2012 15:43