cとc#での共有メモリ
-
さこさこ
cとc#での共有メモリ
http://www.argv.org/~chome/shmem.html
で紹介されている方法で共有メモリを作成して、c#で作ったプログラムでこの共有メモリを読むにはどうすればいいのでしょう。
で紹介されている方法で共有メモリを作成して、c#で作ったプログラムでこの共有メモリを読むにはどうすればいいのでしょう。
-
さこさこ
Re: cとc#での共有メモリ
ありがとうございます。
やってみたんですが変数aaには何も入っていません。
もちろん最初に共有メモリは作って適当な文字をいれてあり「なまえ」の部分もちゃんと指定しています。
何が悪いのでしょうか。
やってみたんですが変数aaには何も入っていません。
もちろん最初に共有メモリは作って適当な文字をいれてあり「なまえ」の部分もちゃんと指定しています。
何が悪いのでしょうか。
Re: cとc#での共有メモリ
BinaryReader.ReadStringは,先頭に長さを示す可変長のデータが含まれていないと正しく読み取れません。
C++とC#で文字列をやりとりするのであれば,先頭にint型の領域を設けそこにC++側で長さを指定しておき,C#側ではそのバイト数だけ読み取ってEncoding.GetStringで文字列化するとよいでしょう。
C++とC#で文字列をやりとりするのであれば,先頭にint型の領域を設けそこにC++側で長さを指定しておき,C#側ではそのバイト数だけ読み取ってEncoding.GetStringで文字列化するとよいでしょう。
Re: cとc#での共有メモリ
初めの投稿でリンクされているサンプルを挙げて説明しますと、さこさこ さんが書きました:>先頭にint型の領域を設け
とはどうやればいいのでしょう。
教えてください。
以下の部分 を、
こう書き換えることに相当します(検証してないので間違いがあるかもしれません) 読込の方はC側でsizeof(int)の結果が4であれば、BinaryReader.ReadInt32を使います(4バイト=32ビット)。
written by へにっくす
-
さこさこ
Re: cとc#での共有メモリ
として読み込むのですが「closeclose」と読み込まれなければならないのに「loseclose」になってしまいました。
Re: cとc#での共有メモリ
YuOさんのコメント見ていないのですか。
ReadString使えってどこに書いてありますか。
バイト数だけ読み取って、Encode.GetStringで文字列化するとありますよね?それはReadStringではできませんよ。
ReadInt32が返した値は、文字列の長さ(=バイト数)になってますか。
ReadString使えってどこに書いてありますか。
バイト数だけ読み取って、Encode.GetStringで文字列化するとありますよね?それはReadStringではできませんよ。
ReadInt32が返した値は、文字列の長さ(=バイト数)になってますか。
written by へにっくす
-
さこさこ
Re: cとc#での共有メモリ
意味を理解していないですね。Encoding.GetStringで文字列化すれば、の前に、
バイト数だけ読み取る部分がないですよ。ReadStringメソッドの代わりに何を使えばいいか、
BinaryReaderのヘルプを見てちゃんと実装してください。
バイト数だけ読み取る部分がないですよ。ReadStringメソッドの代わりに何を使えばいいか、
BinaryReaderのヘルプを見てちゃんと実装してください。
オフトピック
C#ちゃんと理解してますか?と疑いたくなるようなレスですね。GetStringの引数はbyte[]なのに何でBinaryReaderクラスの変数であるreaderを入れることができるの?
焦って答えてもいいことはありませんよ。
焦って答えてもいいことはありませんよ。
written by へにっくす
-
さこさこ
Re: cとc#での共有メモリ
そうなんです。
c#は全く分からないのです。
始めてから、10時間程度と考えてください。
しかも半分以上はフォームのコントロールの配置とかマウスで操作できるところしかやっていません。
プログラムでwbbrowserを使う必要があったのでc#をしょうがなくやっています。
c#は全く分からないのです。
始めてから、10時間程度と考えてください。
しかも半分以上はフォームのコントロールの配置とかマウスで操作できるところしかやっていません。
プログラムでwbbrowserを使う必要があったのでc#をしょうがなくやっています。
Re: cとc#での共有メモリ
そういうことは最初に書いてください。さこさこ さんが書きました:そうなんです。
c#は全く分からないのです。
始めてから、10時間程度と考えてください。
回答する側もそのつもりでレスするようになりますから。
ただ今回は、ヘルプみりゃ分かる、という点で変わらない投稿になったと思いますが。
(だって書込み側は出来てそうだしね)
これに対する回答をレスしてください。ReadStringメソッドの代わりに何を使えばいいか、
BinaryReaderのヘルプを見てちゃんと実装してください。
written by へにっくす
Re: cとc#での共有メモリ
そもそも,共有メモリを使用する必要はあるのですかね。
普通のプロセス間通信,TCP/IPやNamed Pipeなどに比べて,共有メモリは同期や排他が必要なので格段に取り扱いが難しい技術です。
勉強不足であるならば,もっと簡単な方法を採った方がよいと思いますが。
普通のプロセス間通信,TCP/IPやNamed Pipeなどに比べて,共有メモリは同期や排他が必要なので格段に取り扱いが難しい技術です。
勉強不足であるならば,もっと簡単な方法を採った方がよいと思いますが。
オフトピック
現実的に共有メモリが必要な状態ってあまり思いつかないです。
他のプロセス間通信では不足するという状態にならないと思うのですが。
他のプロセス間通信では不足するという状態にならないと思うのですが。
CでIWebBrowser2使えばよいのでは,と思ってしまったり。さこさこ さんが書きました:プログラムでwbbrowserを使う必要があったのでc#をしょうがなくやっています。