OpenFileMapping

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cユーザー

OpenFileMapping

#1

投稿記事 by Cユーザー » 13年前

またメモリマップドファイルの方に少し戻っています。
まだ本格的に作りこんではいないのですが問題が発生しました。

共有メモリをCreate、Open、Deleteの3つの関数に1つのクラスにまとめDLL化しました。
CreateにはCreateFileMappingした後MapViewOfFileでマッピング処理をいれています。

OpenにはOpenFileMappingをした後MapViewOfFileでマッピング処理を入れています。

Deleteはオブジェクトの破棄などをいれています。


プロセスAで
SampleClass cls;
cls.Create();

とした後
プロセスBで
SampleClass cls;
cls.Open()

とした際
プロセスACreate内のCreateFileMappingで作成したハンドルとプロセスBOpen内のOpenFileMappingで作成したハンドルでアドレスが
異なります。

原因が知りたいです。
ご教授お願い致します。

Cユーザー

Re: OpenFileMapping

#2

投稿記事 by Cユーザー » 13年前

コードはこんな感じになってます。

コード:

long SampleClass::Create()
{
char *test = "test";
	m_handle= CreateFileMapping(
             INVALID_HANDLE_VALUE,
	NULL,
	PAGE_READWRITE,					
             0,
	100,
	test);

	// マッピング開始
	m_mp= (char*)MapViewOfFile(
	m_handle,
	FILE_MAP_ALL_ACCESS, 
             0,
	0,
             100);
              return 0;
}

long SampleClass::Open()
{	
	char* objName =  "test";
	m_handle= OpenFileMapping(
					FILE_MAP_READ, 
					FALSE, 
					objName);

	// マッピング開始
	m_mp= (char *)MapViewOfFile(m_handle,
					FILE_MAP_ALL_ACCESS, 
					0,
					0,
					100);

             return 0;
}


アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: OpenFileMapping

#3

投稿記事 by h2so5 » 13年前

Cユーザー さんが書きました: プロセスACreate内のCreateFileMappingで作成したハンドルとプロセスBOpen内のOpenFileMappingで作成したハンドルでアドレスが
異なります。
MSDNを読めば分かりますが、同じファイルマッピングオブジェクトを指しているからといってハンドルまで同じになるとは書いていませんよ。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: OpenFileMapping

#4

投稿記事 by softya(ソフト屋) » 13年前

ハンドルをアドレスだと決めつけるのは危険なことですよ。せっかく抽象化しているのに。
あとマッピングされるアドレスも異なるので同じだと決めつけてもいけません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Cユーザー

Re: OpenFileMapping

#5

投稿記事 by Cユーザー » 13年前

おっと、msdnを読んでませんでした。

同じじゃなくてもマッピングできるのかな
ちょとみてみます

Cユーザー

Re: OpenFileMapping

#6

投稿記事 by Cユーザー » 13年前

うーん、マッピングできていないです。
どこか間違ってるのかな

Cユーザー

Re: OpenFileMapping

#7

投稿記事 by Cユーザー » 13年前

原因がおそらく判明しました。

OpenのOpenFileMappingで読みとりようの設定にしているせいで
そのあとのMappingでアクセスエラーが発生していた

というものだと思います、多分


ありがとうございました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: OpenFileMapping

#8

投稿記事 by softya(ソフト屋) » 13年前

OpenFileMappingでFILE_MAP_READにもかかわらず、MapViewOfFileでFILE_MAP_ALL_ACCESSだからエラーなのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る