Como Chamar DLL



  • Bom dia,

    Como posso chamar e usar uma DLL feita em uma linguagem OO?
    Pois o exemplo que me foi enviado pela Softwell, a DLL foi feita em Delphi e o código só contém a declaração de uma função com seus parâmetros de entrada e retorno.
    Se fosse uma classe, como chamaria essa DLL e usaria um determinado método?


  • A função de interação com DLL's que existe no Maker apenas faz a invocação de métodos utilizando JNA como você pode ver na implementação abaixo:
    [code]protected static final Variant ebfCallNativeFunction(Variant libraryName, Variant functionName, Variant args, Variant returnType) throws Exception { List<List<Object>> argsList = List.class.cast(args.getObject()); Object[] argValues = new Object[argsList.size()]; for (int i = 0; i < argsList.size(); i++) { List arg = argsList.get(i); argValues[i] = VariantPool.get(arg.get(0)).getJNAValue((String) arg.get(1)); } com.sun.jna.Native.setProtected(true); com.sun.jna.Function func = com.sun.jna.Function.getFunction(libraryName.toString(), functionName.toString()); Object result = func.invoke(Variant.getJNAType(returnType.toString()), argValues); return VariantPool.get(result); }[/code] No seu caso, você pode tentar fazer um método em sua DLL que possa fazer esta ponte, onde ele mesmo instancia a classe que voce quer e faz a chamada do método que você quer.

    T+


  • Vou fazer o teste e postar o resultado.


  • [attachment=0]Erro looking up function.jpg[/attachment] Fiz o solicitado e apresenta o seguinte erro em anexo.
    O que pode ser?


  • Existe algum exemplo da chama e uso de método de uma DLL escrita em linguagem OO, que não seja Delphi.


  • Cara,

    Assim, você tem quer ler um pouco mais sobre JNI/JNA... Essa função faz cargas de dlls que foram feitas compiladas em C/C++.

    C/C++ não podem acessar objetos dot net (que foi o que deu a entender com seu print screen), pelo menos não mais do que referencias estáticas ou algo do tipo (E nem tenho certeza quanto a isso). Cada caso é um caso, mas acredito que para o que você quer, a função não vai lhe ajudar, você precisa de outras alternativas.


  • Fiz e compilei uma DLL em C++ e apresenta o mesmo erro. [attachment=0]Erro na DLL feita em C++.jpg[/attachment]

Log in to reply