Até onde eu sei (me corrijam se eu estiver falando besteira), não há acesso direto à bibliotecas compartilhadas (DLL no windows, “shared libraries” no unix e unix-like).
O que se pode fazer é criar uma interface JNI (essa sim uma DLL/shared library reconhecida pelo java) que faz a chamada a DLL/shared library em questão.
digamos que vc tenha que chamar uma função em uma dll:
int __stdcall FuncaoFeitaEmC(const char *parametro);
Primeiro vc criaria uma classe em java assim:
FuncoesDaDLL.java
public class FuncoesDaDLL {
public static native funcaoFeitaEmC(String parametro);
static {
System.loadLibrary(“FuncoesDaDLLJNI”);
}
}
depois de compilada a classe, vc roda “javah -jni FuncoesDaDLL”
feito isso, será criado um arquivo FuncoesDaDLL.h com as definições das funções que devem ser implementadas chamando a sua dll e compiladas em uma outra DLL (a DLL JNI) usando um compilador C++ (em C puro vc vai ter mais trabalho) (gcc , visual c++, c++ builder ou qualquer outro q crie DLLs)
Você acabará ficando com 2 dlls (a dll contendo a função desejada e a dll de JNI)
Coloque a dll onde o java possa encontrar qdo executar sua aplicação.
mais informações em: http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html
Espero ter ajudado