Aplicação Java invocar metodo C#

Bom dia,

Estou precisando invocar um metodo implementado em C# a partir de uma app java, pelo que eu vi na net o pessoal passa pra c++, vi tb sobre a jna, mas nao estou tendo sucesso, usando jna meu codigo esta assim:

public static void main(String args[]){
MySharedLibrary lib = (MySharedLibrary) Native.loadLibrary(“Teste01”, MySharedLibrary.class);
int i = lib.librarymethod(“metodoTeste”);
System.out.print(i);
}

e

namespace Teste01
{
public class Class2
{
static int metodoTeste()
{
return 2;
}
}
}

e está dando erro na hora de carregar a dll, onde eu coloco ela? É assim mesmo? Vai funcionar com C#/.Net??
Nao tenho acesso à pasta system32, tem como colocar a pasta da minha dll no path??

Vlw ae

cara,

primeiro, qdo for postar algum codigo coloque dentro da taga [code].

para se trabalhar com JNA, vc deve fazer o seguinte:
1 - colocar a .dll dentro da pasta /system32 do windows
2 - vc deve implementar um interface no java que estenda Libary e que a assinatura do metodo deve ser a mesma coisa da sua biblioteca em C#, tipo de retorno, nome do metodo, tipo de parametro
3 - passe esse codigo para dentro da sua interface

MySharedLibrary lib = (MySharedLibrary) Native.loadLibrary("Teste01", MySharedLibrary.class); 

4 - a chamada do metodo é somente assim

public static void main(String args[]){
MySharedLibrary lib = (MySharedLibrary) Native.loadLibrary("Teste01", MySharedLibrary.class);
int i = lib.metodoTeste();
System.out.print(i);
}

t+

Opa, desculpa a falha, corrigi as classes o codigo está assim:

//Classe main java
//Nao consigo colocar arquivos no System32, entao usei o metodo System.setProperty, agora, a parte de carregar a library está funcionando
public static void main(String args[]){
		System.setProperty("jna.library.path", "D:/Documents and Settings/ke1x.PETROBRAS/Meus documentos/Visual Studio 2008/Projects/Teste01/Teste01/bin/Release/");  
		MySharedLibrary lib = (MySharedLibrary) Native.loadLibrary("Teste01", MySharedLibrary.class);
		int i = lib.librarymethod();
		System.out.print(i);
	}
//Interface
public interface MySharedLibrary extends Library {
    public int librarymethod();
}
//classe co mo metodo em c#
public class Class2
    {
        public static int librarymethod()
        {
            return 2;
        }
    }

Mas ainda está dando erro:
Exception in thread “main” java.lang.UnsatisfiedLinkError: Error looking up function ‘librarymethod’: Não foi possível encontrar o procedimento especificado.

Sendo que Teste01, é o nome da solution no Visual Studio, mais alguma ideia?? Estou perdido

cara,

faz assim

public static void main(String args[]){  
        
        int i = MySharedLibrary.INSTANCE.librarymethod();  
        System.out.print(i);  
    }
public interface MySharedLibrary extends Library {  
   MySharedLibrary INSTANCE = (MySharedLibrary) Native.loadLibrary("Teste01", MySharedLibrary.class);  

    public int librarymethod();  
}
public class Class2  
    {  
        public static int librarymethod()  // cara nao sei, acho que vc vai ter problema com esse static, qualquer coisa vc tira ele
        {  
            return 2;  
        }  
    }  

e para funcionar vc deve ter uma um arquivo Teste01.dll no windows/system32

t+

É bem mais complicado que parece.

Já vi três soluções diferentes:

a) Você tem de registrar sua DLL .NET como se fosse COM (isso não é difícil mas deixa sua DLL um pouco lenta) e a seguir você tem de acessar isso usando um pacote como o Jacob ( http://sourceforge.net/projects/jacob-project/ ). Boa sorte
b) Você tem de comprar um software como o http://www.jnbridge.com/ ou o http://www.ezjcom.com/java.net.html - não sei se elas funcionam bem.
c) Você expõe sua classe C# como um web service, e então chama esse web service em Java. É um bocadinho lento também e exige hospedar sua classe C# em um web server como o IIS.

alissonvla, fiz as alterações:

(coloquei esse linha na interface:

MySharedLibrary INSTNCE = (MySharedLibrary) Native.loadLibrary("Teste01", MySharedLibrary.class);

e tirei o “static” do metodo no c#)

e deu o mesmo erro, eu só não coloquei a dll no system32, pq aqui eu nao tenho permissao pra isso, mas eu to usando o System.setProperty(“jna.library.path”, “…”), mas acho que esse não é o problema, vou pesquisar agora sobre o jacob, o que vc acha??

Pesquisa por JNative cara. Vai simplificar sua vida ao acesso de libraries nativas.

É isso que eu estou usando, mas tá dando erro…

cara,

tem que colocar a dll no windows/system32 so assim que vai funcionar, arruma uma permissão :smiley:

t+

JNative e JNA não são adequadas para chamar DLLs em .NET. Não quebre a cabeça com elas - vai dar erro mesmo, isso é esperado.

Valeu galera, vou usar web service mesmo!