Usar dll do Windows

3 respostas
M

Quero chamar métodos (GetDiskFreeSpaceExA) de uma dll do windows (kernel32) Onde eu passo como parametro a unidade (C: ou D) e ela me retorna o tamanho do disco. Como faço isso em java???

3 Respostas

S

se já nao houver implementacao desse método em alguma classe utilitária vc terá de usar JNI para realizar chamadas da biblioteca (dll) do windows

M

Blz cara, to tentando rodar o tutorial da sun, o famosíssimo “HelloWorld”. Mas está dando o seguinte erro:

C:\Marcelo\Apostilas>java HelloWorld

Exception in thread main java.lang.UnsatisfiedLinkError: displayHelloWorld

at HelloWorld.displayHelloWorld(Native Method)

at HelloWorld.main(HelloWorld.java:9)
M
Velhinho, mais uma coisa!!! Eu consegui um código que faz o que eu preciso (Usa a informação da dll Kernel32)!!! Excelente, agora gostaria de saber como faço uma rotina JNI pra implementar este código C que já está compilado???? O código vem a seguir:
#include <windows.h>
#include <stdio.h>
typedef BOOL (WINAPI *PGETDISKFREESPACEEX(LPCSTR,
   PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER));

BOOL MyGetDiskFreeSpaceEx(LPCSTR pszDrive)
{
   PGETDISKFREESPACEEX pGetDiskFreeSpaceEx;
   __int64 i64FreeBytesToCaller, i64TotalBytes, i64FreeBytes;
   DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters;
   BOOL fResult;

   pGetDiskFreeSpaceEx = GetProcAddress( GetModuleHandle("kernel32.dll"),
                          "GetDiskFreeSpaceExA");

   if (pGetDiskFreeSpaceEx)
   {
      fResult = pGetDiskFreeSpaceEx (pszDrive,
                 (PULARGE_INTEGER)&i64FreeBytesToCaller,
                 (PULARGE_INTEGER)&i64TotalBytes,
                 (PULARGE_INTEGER)&i64FreeBytes);

   // Process GetDiskFreeSpaceEx results.
      printf("Total free bytes = %I64d\n", i64FreeBytes);
   }

   else
   {
      fResult = GetDiskFreeSpace (pszDrive,
                 &dwSectPerClust,
                 &dwBytesPerSect,
                 &dwFreeClusters,
                 &dwTotalClusters);

   // Process GetDiskFreeSpace results.
      printf("Total free bytes = I64d\n",
             dwFreeClusters*dwSectPerClust*dwBytesPerSect);
   }

}
Só o tutorial da sun não me deu base pra saber como proceder neste caso!!! Ficarei muito grato se me ajudarem!!! Obrigado
Criado 13 de maio de 2004
Ultima resposta 14 de mai. de 2004
Respostas 3
Participantes 2