GetModuleFileNameEx
을 Java 응용 프로그램으로 가져 오려고합니다. 함수의 정의는 다음과 같습니다 나는이 같은 클래스에 정의java.lang.UnsatisfiedLinkError : 'GetModuleFileNameEx'함수를 찾는 동안 오류가 발생했습니다.
public abstract DWORD GetModuleFileNameEx(
WinNT.HANDLE hProcess,
WinNT.HMODULE hModule,
char[] pathName,
WinNT.DWORD pathNameSize
);
:
DWORD WINAPI GetModuleFileNameEx(
_In_ HANDLE hProcess,
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
난에 그 번역
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);
}
을하지만 난 메서드를 호출하려고 할 때 오류가 발생합니다 :
java.lang.UnsatisfiedLinkError: Error looking up function 'GetModuleFileNameEx': Uvedená procedura nebyla nalezena.
ouble 체크 및 스택 오버 플로우 및 기타 JNA 프로그램의 게시물에 따라 LPTSTR
은 JNA API에서 char[]
으로 올바르게 변환됩니다. 그래서 뭔가 다른 것이 틀림 없습니다. 잘못된 dll을 가져 오거나 잘못된 옵션을 사용합니까?
Windows 7 x64 비트 (체코 어, 영어 이외의 오류 메시지)로 실행 중입니다.
내 보낸 함수가 GetModuleFileNameExW입니다. 그건 자바 코드와 일치하는 유니 코드 변형입니다 [] –
메모로; 내 자신의 kernel32를 검사했는데 Windows 10에서는'GetModuleFileNameExW'가 부족한 것으로 보이지만 psapi는 KernelBase와 함께 작동합니다. 같은 자바 매개 변수 유형, 그냥 다른 이름과 dll. –
@jorn 이것은 모두 문서화되어 있습니다. –