Gerar arquivo .h e .dll

14 respostas
F

como faço pra gerar arquivo .h e .dll??

e outra coisa como vejo o codigo de um arquivo dll…por exemplo tenho q usar os metodos presentes numa dll como faço pra saber??

14 Respostas

F

Olá

O Delphi, VB e Visual Studio geram DLL’s sem muito esforço.

F

ok eu tenho a versao Delphi 7 aqui vou tentar gerar uma DLL, agora oq nao intendo é como eu uso uma dll…por exemplo dll é um conjunto de métodos q sera usado pelo programador mas como eu vou saber esses metódos(funções) ??

J

Você precisa fazer o disassembly da dll. Use o tdump do delphi, ou o do visual studio. Existem várias ferramentas que fazem isso.

F

tipo eu soh instalei o delphi aqui pra isso manjo nada desse delphi 7…teria como me explicar fica essa propriedade (Delphi 7 aqui)

T

Existem 3 tipos de DLLs:

  • A DLL antiga, normalmente escrita em C, C++, Delphi. Para usar uma DLL desse tipo, normalmente é necessário ter um arquivo .LIB e um arquivo .H (se a DLL tiver sido escrita em C/C++). Você pode usar o utilitário “depends” (do Visual Studio) para ver que símbolos são exportados por essa DLL, mas como a informação de parâmetros e tipos não é disponibilizada pela DLL, você não consegue só com o “depends” usar a DLL.
  • A DLL “COM” ou “ActiveX”, que é aquela que você precisa “registrar” e que pode ser usada em VB 6.0 ou outras linguagens. Para usar uma DLL desse tipo, é necessário obter um arquivo .TLB (“Type Library”) ou então obter as referências no Visual Studio.
  • A DLL “.NET”, que pode ser usada em C#, VB.NET e outras linguagens .NET. Para usar uma DLL desse tipo, é necessário obter as referências no Visual Studio.

O Java não tem suporte direto a nenhum dos três tipos.
Para chamar a DLL do tipo “antigo”, você pode usar o JNA (https://jna.dev.java.net) , ou então JNI.
Para chamar uma DLL “COM”, você pode usar o Jacob ( http://sourceforge.net/projects/jacob-project )
Para chamar uma DLL “.NET” você precisa pagar . Por exemplo, a JNBridge ( http://www.jnbridge.com/ ) ou a J-Integra ( http://j-integra.intrinsyc.com/ )

F

a dll q eu estou tentando comunicar é do tipo antiga entao pois vem em XPCOM32.lib, XPCOM32.h e XPCOM32.dll

eu tentei usar o JNA mas uma pergunta eu coloca esses 3 arquivos na raiz do sistema na system32 (Win Vista) ??

os .jar do JNA ja coloquei no classpatch e ta td ok

agora preciso de ajuda mesmo é pra intender como chamar os metodos dessa dll (tenho disponivel aqui apensa o delphi 7 Studio e estou usando netbeans 6.5) se tiver como me da uma força sou leigo em uso de dlls sempre programei em web…to precisando urgente fazer essa dll funcionar. Obrigado

T

Você precisa de alguém que saiba um pouco de C, não de Pascal (Delphi) para lhe ajudar. Se essa DLL é de um equipamento que você comprou, solicite ajuda ao departamento técnico da empresa que vende o tal equipamento. Pode ser até que alguém já tenha feito o caminho das pedras para poder usar em Java.

F

então entrando em contato com o fabricante me disponibilizaram a documentação da DLL

agora eh soh conseguir comunicar ela com o java…mas uma pergunta eu coloco a DLL na pasta System32(Windows Vista)?

vou usar o JNA

F

tentei fazer da seguinte maneira

criei uma interface java com o metodo mesmo nome da dll

import com.sun.jna.Library;

public interface MySharedLibrary extends Library{

    public void XPComVersion(String sBuffer);

}

depois uma classe pra dar corpo a esse metodo

import com.sun.jna.Native;

public class testeJNA {

    public static void main(String args[]){
        MySharedLibrary lib = (MySharedLibrary) Native.loadLibrary("xpcom32", MySharedLibrary.class);
        String sBuffer = null;
        lib.XPComVersion(sBuffer);
        System.out.println(sBuffer);

    }

}

mas me retornou o seguinte erro

[b]
run:

An unexpected error has been detected by Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x036c894d, pid=4504, tid=4644

Java VM: Java HotSpot™ Client VM (10.0-b23 mixed mode, sharing windows-x86)

Problematic frame:

C [xpcom32.dll+0x894d]

An error report file with more information is saved as:

C:\Users\REST07\Desktop\JavaHardware\ComunicacaoDLL\hs_err_pid4504.log

If you would like to submit a bug report, please visit:

http://java.sun.com/webapps/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
[/b]

pode ser porque nao foi encontrado a dll???

T

Pelo tipo de erro, dá a impressão é que você passou incorretamente os parâmetros para a DLL.
Como é a declaração do método XPComVersion que está no arquivo .H?

F

Na documentação da DLL esta escrito a seguinte informação:

XPComVersion
Sumário
void FAR PASCAL XPComVersion (char far * sBuffer // Ponteiro para buffer com ao menos 25 caracteres
);
Descrição
A função ‘XPComVersion’ retorna, no buffer cujo endereço foi passado como parâmetro, a versão da DLL sendo usada no
momento.
O argumento ?sBuffer? é um ponteiro que define a localização do buffer de destino. Deve ter o tamanho de pelo menos 25
caracteres.
Valor Retornado
Não há valor retornado
Consulte
ComOpen, ComClose.

Exemplo

#include "xpcom16.h" char far sBuffer[25]; int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { XPComVersion(sBuffer); MessageBox((HWND)NULL, sBuffer, "Exemplo", MB_OK); return TRUE; }

se ficar dificil de intender e puder me ajudar lhe mando a documentação intereira da DLL.

mais uma vez obrigado.

F

dei uma olhada acho q percebi a variavel eh um ponteiro tipo buffer e na minha aplicaçao no java passei apenas como String…seria esse o erro??

se for como declaro uma variavel do tipo buffer?

T

https://jna.dev.java.net/#char_buffer

F

vlw thingol consegui comunicar com o hardware e com a dll…esse metodo eu estava passando tipo de parametro errado mesmo

tentei um outro da dll e deu certo…agora eh soh replica os metodos na interface e começa a programa :smiley:

Criado 2 de dezembro de 2008
Ultima resposta 3 de dez. de 2008
Respostas 14
Participantes 4