Gerar arquivo .h e .dll

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??

Olá

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

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) ??

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

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

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/ )

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

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.

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

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???

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?

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.

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?

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

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: