J'essaie d'importer GetModuleFileNameEx
dans une application java. La définition de la fonction est:java.lang.UnsatisfiedLinkError: Erreur lors de la recherche de la fonction 'GetModuleFileNameEx'
DWORD WINAPI GetModuleFileNameEx(
_In_ HANDLE hProcess,
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
Je traduit cela en:
public abstract DWORD GetModuleFileNameEx(
WinNT.HANDLE hProcess,
WinNT.HMODULE hModule,
char[] pathName,
WinNT.DWORD pathNameSize
);
qui je définissais en classe comme ceci:
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinNT;
import com.sun.jna.win32.W32APIOptions;
public abstract interface Kernel32Ext
extends Kernel32
{
public static final Kernel32Ext INSTANCE = (Kernel32Ext)Native.loadLibrary("kernel32.dll", Kernel32Ext.class, W32APIOptions.DEFAULT_OPTIONS);
public abstract DWORD GetModuleFileNameEx(WinNT.HANDLE hProcess, WinNT.HMODULE hModule, char[] pathName, WinNT.DWORD pathNameSize);
}
Mais quand je tente d'appeler la méthode que je obtenir une erreur:
java.lang.UnsatisfiedLinkError: Error looking up function 'GetModuleFileNameEx': Uvedená procedura nebyla nalezena.
ouble vérifié et selon les messages ici sur le débordement de la pile et d'autres programmes JNA, LPTSTR
traduit correctement à char[]
dans l'API JNA. Donc, il doit y avoir quelque chose d'autre qui ne va pas. Est-ce que j'importe la mauvaise DLL, ou avec de mauvaises options?
Je cours cela sur Windows 7 x 64 bits (tchèque, d'où le message d'erreur non-anglais).
La fonction exportée est GetModuleFileNameExW. C'est la variante Unicode correspondant java char [] –
Comme une note; J'ai vérifié mon propre noyau32, et il semble manquer 'GetModuleFileNameExW' (sur Windows 10), cependant, le chargement de psapi fonctionne, ainsi que KernelBase. Les mêmes types de paramètres Java, juste un nom et une DLL différents. –
@jorn tout est documenté –