
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
JNIを使ってのWin32共有メモリ(メモリマップトファイル)の作成/使用は、
以下のようになると思います。
-----Java-----
class nativesm {
public native int CreateFileMapping();
public native int MapViewOfFile(int handle);
public native int ReadMemory(int addr);
public native int WriteMemory(int addr, int data);
public native boolean CloseMemory(int handle, int addr);
static { System.loadLibrary("nativesm"); };
}
public class sharemem {
public static nativesm SM;
public static void main(String arg[]) {
int Handle, Addr, i;
SM = new nativesm();
Handle = SM.CreateFileMapping();
System.out.println(Handle);
Addr = SM.MapViewOfFile(Handle);
System.out.println(Addr);
for (i = 0; i < 0x100; i ++)
System.out.println(SM.WriteMemory(Addr + i, SM.ReadMemory(Addr + i) + i));
SM.CloseMemory(Handle, Addr);
};
}
-----C-----
#include <windows.h>
#include "jni.h"
JNIEXPORT jint JNICALL Java_nativesm_CreateFileMapping(JNIEnv, jclass) {
return((jint)CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0, 0x100, "SharedMemory"));
};
JNIEXPORT jint JNICALL Java_nativesm_MapViewOfFile(JNIEnv, jclass, jint handle) {
return((jint)MapViewOfFile((HANDLE)handle, FILE_MAP_ALL_ACCESS, 0, 0, 0));
};
JNIEXPORT jint JNICALL Java_nativesm_ReadMemory(JNIEnv, jclass, jint addr) {
return((jint)(*(unsigned char *)addr));
};
JNIEXPORT jint JNICALL Java_nativesm_WriteMemory(JNIEnv, jclass, jint addr, jbyte data) {
return(*((unsigned char *)addr) = data);
};
JNIEXPORT jboolean JNICALL Java_nativesm_CloseMemory(JNIEnv, jclass, jint handle, jint addr) {
UnmapViewOfFile((void *)addr);
return((jboolean)CloseHandle((HANDLE)handle));
};
No.1
- 回答日時:
> JAVAで共有メモリって使えるんですか?
SYSV でいう IPC は、使えません。だって、unix 以外でも Java は動きますから。
> Cで生成した共有メモリをアタッチ出来る方法
> をご存知の方がいらっしゃいましたら、教えて
> 頂けないでしょうか?
どうしても、これをやりたい、ということであれば、JNI (Java Native Interface) と
言う方法を使って、Java から C で作った関数を呼ぶことができますので、それを
利用することになります。
# 自称初心者には、荷が重いかも
参考URL:http://java.sun.com/docs/books/tutorial/native1.1/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- オンラインゲーム マインクラフトjava版が起動しない理由と改善方法について 1 2023/02/23 16:53
- CPU・メモリ・マザーボード マイクラ(java)で影modを使用しながら快適に遊びたい!! 1 2022/08/02 18:20
- iOS iPhone用動画保存アプリiCapのデータは外付けUSBメモリに保存できますか? 1 2022/10/18 17:48
- CPU・メモリ・マザーボード AUSU PRIME X570-PROというマザーボードを使用しており、タルコフというゲームを快適に 2 2022/12/31 15:38
- その他(パソコン・周辺機器) タブレットで使用するUSBメモリについて 7 2022/05/26 14:27
- Java なぜJavaは、メモリ管理のためにガーベジコレクションの機能が存在するのですか? 3 2022/06/14 01:42
- Google+ Googleのドキュメントの使い方を教えて貰いたいです。 書いたものを共有して格納場所に入れて 毎日 2 2022/05/02 10:55
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- その他(パソコン・スマホ・電化製品) 事務所を持たずに 社員同士のパソコンで共有ファイルを作る方法を 教えて頂きたいです。 有料のものでお 4 2023/06/06 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
(Swing)JTextFieldを半角のみ入...
-
式の型は配列型で int に解決済...
-
メインが含まれていません
-
複数のボタンを配置し、それぞ...
-
intが負の時に投げる例外はあり...
-
前日日付の取得
-
リサージュ図形
-
デスクトップのアイコンの位置...
-
sin曲線とcos曲線を描くプログ...
-
javaでカレンダー作成
-
C#でバブルソート
-
javaでcsvファイル読込時の改行...
-
break ラベルの挙動
-
画像を分割するには?【パズル...
-
シンボルを見つけられません
-
数字のフォーマット(形式)を...
-
ヒープソート
-
java streamでenum配列への変換
-
Java 初心者 int型の取り扱い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c# デリゲート関連の命名について
-
「配列定数は、イニシャライザ...
-
SwingでJtableのヘッダ行が表示...
-
java spring でエラーが出て困...
-
Comparatorを使用したソートに...
-
【C#】フォームをなめらかに移動
-
アンマネージDLLで、ダイアログ...
-
JUnit4のアノテーションについて
-
式の型は配列型で int に解決済...
-
java 長さの異なる配列の代入
-
DataSet(DataTable)の使い方
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
メインが含まれていません
-
javaでcsvファイル読込時の改行...
-
tabにdrawImageで画像を描画したい
-
ウィンドウの整列
-
C#でバブルソート
-
行の途中から読み込む方法
-
ある年月の月間日数を取得する...
おすすめ情報