- ベストアンサー
ファイルマッピングについて
ファイルマッピングについての質問です。 現在CreatFileMapping、OpenFileMapping、MapViewOfFileをつかって EXE間のデータのやり取りをしているのですが、 このファイルマッピングを利用して構造体を やりとりする事は出来ないものでしょうか? 開発環境はWinNT4とVB6です。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
試してみました。 gOpenFileMappingMapViewOfFileFileMapReadFileMapWrite.vbpの変更点 --- Private Declare Sub MoveMemory Lib "kernel32.dll" _ Alias "RtlMoveMemory" _ (Destination As Any, _ Source As Any, _ ByVal Length As Long) Private Type tyData x As Long y As Long b(9999) As Byte s As String * 1024 End Type Private Data As tyData Command1_Click() Data.s = Text1.Text ' 文字列をコピー Call MoveMemory(ByVal lngFileMapViewAddress, Data, Len(Data)) Command2_Click() Data.s = "" Call MoveMemory(Data, ByVal lngFileMapViewAddress, Len(Data)) Label3.Caption = RTrim(Data.s) Command3_Click() lngFileMapSizeLow = Len(Data) --- 普段はEXE間のデータはファイルで渡していますが、ファイルマッピングも 結構いいですね。今後、挑戦したいです。
その他の回答 (3)
- todo36
- ベストアンサー率58% (728/1234)
>二次元配列 二次元配列を一つの構造体にするのが、手っ取り早いです。 Private Type tyData x(100, 100) As Long End Type
- todo36
- ベストアンサー率58% (728/1234)
試していませんが、lstrcopyをMoveMemoryに変更すればいいと思います。 構造体→ファイルマッピング MoveMemory(lngFileMapViewAddress, 構造体,len(構造体)) ファイルマッピング→構造体 MoveMemory(構造体, lngFileMapViewAddress,len(構造体))
- todo36
- ベストアンサー率58% (728/1234)
ファイルマッピングは経験ないけど メモリブロックを渡すので、文字列であろうと構造体であろうと 同じだと思いますが、何か問題があるのでしょうか?
- 参考URL:
- http://www.vbvbvb.com/jp/gtips/1001/gOpenFileMappingMapViewOfFileFileMapReadFileMapWrite.html
補足
まさにこのソースを使って作っているのですが、 書き込みに行くときのこのソースで言うText1.Textにあたる 部分を構造体にすると型が違うと言われます。 なのでバッファに当る変数の型を構造体型にしたところ こんどは読み取り側で型が合わなくなります。読み取り側でバッファの型を 変えてもダメでした。現在そこで行き詰まっておりますm(_ _)m
補足
サンプルありがとうございます! 構造体受け渡し出来ました。こんどは二次元配列を送ってみようとしているんですが 構造体と同じやり方で出来るのでしょうか?今試しているのですが どうにも上手くいきません(^^;