- - PR -
Marshal.Copyについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-04-29 17:34
[WinXP、.NET 2003、C#]
いつもお世話になっております。 WinAPIのMapViewOfFileで取得したハンドルに対して データの読み込み・書き込みを行いたいのですが、 データ型の変換で躓いています。 struct型のデータをMarhal.Copyで書き込み+読み込みを 行うと思いbyte配列型への変換(+戻し方)の仕方を調べたのですが 分かりませんでした。 Marshal.Copyでstruct型を使いたい場合はどのように すれば良いのでしょうか? どなたかご教授宜しくお願い致します。 |
|
投稿日時: 2004-04-29 19:41
諸農です。
SDKドキュメントの斜め読みなので、 目的に合致しているかどうかは定かではありませんが。。。 Marshal.StructureToPtr というのがありました。 参考になれば幸いです。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ |
|
投稿日時: 2004-04-30 09:57
Jubeiさん
お返事ありがとうございます。 Marshal.StructureToPtrなのですが使えませんでした。 MapViewOfFileで取得したマップハンドルに対して struct型のデータを書き込んだり、読み込んだりしたい時に Marshal.CopyではIntPtr型からIntPtr型への読み込みや書き込み が出来ません。なのでstruct型をIntPtr型へ直しても使えない です。そこで考えたのがstruct型をbyte配列に直せないかという 事です。 Marshal.StructureToPtrでこの変換は可能なのでしょうか? (自分なりに調べましたが分かりませんでした) よろしくお願いします。 |
|
投稿日時: 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-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-05-04 18:53
>Jubeiさん、渋木宏明(ひどり)さん
ご回答ありがとうございます。 Jubeiさんからのヒントを私は間違ったやり方で 使用していました(理解していませんでした、申し訳ありません)。 渋木さんからのコードで気づきました。 Marshal.StructureToPtrをIntPtr型に変換して更に Marshal.Copyを呼び出すとばかり思っていました。 サンプルを作って試したところStructureToPtrと PtrToStructureで動作させることが出来ました。 >大体、MapViewOfFile() が返すのは「マップハンドル」とやらではなく、マップされたビューのアドレスですが、その辺の理解は大丈夫ですか? 理解しているつもりです。。。 普段Cで組んでいるものをC#に直そうと思うとなかなか 思うように進まず、皆さんのお力を借りようと思いました。 ホントありがとうございました! |
1