我需要从外部进程访问名为“ MumbleLink”的内存共享文件。我知道我必须使用JNA才能使用Kernel32.dll中的功能。
应该有一个名为OpenFileMapping
的函数,但我找不到它。 MapViewOfFile
的描述说hFileMappingObject句柄由CreateFileMapping
和OpenFileMapping
返回。 MapViewOfFile
在那儿,但没有把手我就不能使用。
32位和64位平台之间是否可能存在差异? 也许我走在完全错误的道路上,但这是到目前为止的事情:
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinBase;
public class MapFile {
private static String fileName = "MumbleLink";
Kernel32 kernel32 = Kernel32.INSTANCE;
public MapFile() {
}
public Pointer getFilePointer() {
// CreateFileMapping(WinNT.HANDLE hFile, WinBase.SECURITY_ATTRIBUTES lpAttributes, int flProtect,
// int dwMaximumSizeHigh, int dwMaximumSizeLow, java.lang.String lpName)
//HANDLE fileMappingObject = kernel32.CreateFileMapping(fileHandle, secAttr, 0, 0, 0, fileName);
HANDLE fileMappingObject = kernel32.OpenFileMapping(WinNT.PAGE_READONLY, false, fileName);
if (fileMappingObject == null) {
System.out.println("Could not open file mapping object");
return null;
}
// (HANDLE, int, int, int, int)
Pointer fileMapPtr = Kernel32.INSTANCE.MapViewOfFile(fileMappingObject, 0, 0, 0, 0);
System.out.println(fileMapPtr.getString(0));
return fileMapPtr;
}
}
顺便说一句,我正在使用jna-platform-4.5.2.jar