- PR -

Marshal.Copyについて

1
投稿者投稿内容
会議室デビュー日: 2004/04/29
投稿数: 14
投稿日時: 2004-04-29 17:34
[WinXP、.NET 2003、C#]

いつもお世話になっております。

WinAPIのMapViewOfFileで取得したハンドルに対して
データの読み込み・書き込みを行いたいのですが、
データ型の変換で躓いています。

struct型のデータをMarhal.Copyで書き込み+読み込みを
行うと思いbyte配列型への変換(+戻し方)の仕方を調べたのですが
分かりませんでした。

Marshal.Copyでstruct型を使いたい場合はどのように
すれば良いのでしょうか?

どなたかご教授宜しくお願い致します。


Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-29 19:41
諸農です。

SDKドキュメントの斜め読みなので、
目的に合致しているかどうかは定かではありませんが。。。

Marshal.StructureToPtr

というのがありました。
参考になれば幸いです。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
会議室デビュー日: 2004/04/29
投稿数: 14
投稿日時: 2004-04-30 09:57
Jubeiさん

お返事ありがとうございます。

Marshal.StructureToPtrなのですが使えませんでした。
MapViewOfFileで取得したマップハンドルに対して
struct型のデータを書き込んだり、読み込んだりしたい時に
Marshal.CopyではIntPtr型からIntPtr型への読み込みや書き込み
が出来ません。なのでstruct型をIntPtr型へ直しても使えない
です。そこで考えたのがstruct型をbyte配列に直せないかという
事です。

Marshal.StructureToPtrでこの変換は可能なのでしょうか?
(自分なりに調べましたが分かりませんでした)

よろしくお願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-01 23:10
諸農です。

こんなの見つけました(^^;

Al-Light掲示板
「グループ:Win(C#) タイトル:Win32File」
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=760
お二方のやりとりがおもしろいです。


それと、こんなのも。
experts-exchange掲示板
Filemapping code (C#)
http://www.experts-exchange.com/Programming/Programming_Languages/C_Sharp/Q_20956223.html
BITMAPを共有する話のようです。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-05-02 09:22
>Marshal.StructureToPtrなのですが使えませんでした。

どんな風に?
「使えませんでした」じゃ、何がどーしてるのかまるで伝わってきません。

大体、MapViewOfFile() が返すのは「マップハンドル」とやらではなく、マップされたビューのアドレスですが、その辺の理解は大丈夫ですか?

大雑把な擬似コードで表すと

struct Hoge;

が定義済みだとして、

Hoge hoge = new Hoge();

IntPtr address = MapViewOfFile(適宜);

Marshal.StructToPtr (hoge, address, false);

でOKなはずなんですが。。。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
会議室デビュー日: 2004/04/29
投稿数: 14
投稿日時: 2004-05-04 18:53
>Jubeiさん、渋木宏明(ひどり)さん

ご回答ありがとうございます。

Jubeiさんからのヒントを私は間違ったやり方で
使用していました(理解していませんでした、申し訳ありません)。

渋木さんからのコードで気づきました。
Marshal.StructureToPtrをIntPtr型に変換して更に
Marshal.Copyを呼び出すとばかり思っていました。
サンプルを作って試したところStructureToPtrと
PtrToStructureで動作させることが出来ました。

>大体、MapViewOfFile() が返すのは「マップハンドル」とやらではなく、マップされたビューのアドレスですが、その辺の理解は大丈夫ですか?
理解しているつもりです。。。

普段Cで組んでいるものをC#に直そうと思うとなかなか
思うように進まず、皆さんのお力を借りようと思いました。

ホントありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)