tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: 共有メモリの使い方
投稿日: 2008/02/06(Wed) 10:47
投稿者ダリア
魔界の仮面弁士様。
早速のお返事ありがとうございます。
他にも色々と方法があるのですね。Cの担当者と相談しようと思います。


> どこまで分かっていて、どこが分からないのかを断片的にでも書いてもらわないと、
> アドバイスのしようがありません…。(^^;
>
> もし何も分からないのであれば、せめて参考にしたサイトだけでも列挙されては如何でしょう。
> さもないと、すでにご存知のサイトを再紹介される可能性がありますよね。
>
> あと、勉強するのであれば「VB6にて」という制限をつけて探すのは止めた方が良いかと。
> うまくVB6向けのサイトがあれば良いですが、そう都合よく見つからない場合もあるので、
> まずは他の言語でも良いので、とにかく解説されているサイトを見つけ、API そのものの
> 使い方や仕様を学んでおくことをお奨めします。(今回の件に限らず)

アドバイスありがとうございます。
初歩的な疑問で申し訳ありませんが、具体的に行き詰っているところを書き込ませていただきます。

参考にしたサイト
http://athomejp.com/goldfish/api/sharedmemory.asp (Cでの解説)
http://yokohama.cool.ne.jp/chokuto/urawaza/index.html (HSP?での解説)
上記サイトの解説は大変参考になりました。
ただ、プログラムはさっぱりでした。HSPが何なのかさえ知りませんでしたので。
http://www.winapi-database.com/File/FileMapping/index.html
(VB5-6、VB.NETならびにCでの関数ごとの解説)
http://wisdom.sakura.ne.jp/system/winapi/win32/win150.html (Cでの解説)


メモリマップトファイルにて大きな疑問点は以下の二つです。
1.構造体が複数個存在し各々のサイズが異なる場合。ファイルマッピングオブジェクトの作成時(CreateFileMapping関数の使用時)にそれぞれ構造体ごとに作成してよろしいのでしょうか?
オブジェクト名を入力することと、サイズが異なることから各々作成しなければいけないような気がするのですが。
(参考にしたプログラムサンプルが構造体1つだったので、複数個になった場合がよく分かりませんでした)
2.また、ある構造体のアドレスをどのように知れば良いのかが、疑問です。
ある特定の(指定したと言うべきかもしれませんが)構造体のアドレスを知りたい場合、以下のようにMapViewOfFileを用いて、その返り値(ビューの開始アドレスが返るのですが)から、アドレスを得る。というのは、考え方として正しいですか?

        lpFileMap = MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0&, 0&, 0&)
        
    lpFileMap:ある特定の構造体の先頭アドレスが入る変数
    hFileMap:CreateFileMappingの返り値(ファイルマッピングオブジェクトのハンドル)
    FILE_MAP_ALL_ACCESS:dwDesiredAccessパラメータとして、FILE_MAP_ALL_ACCESS変数で設定済み
    dwFileOffsetHighパラメータ、dwFileOffsetLowパラメータ、dwNumberOfByteToMapパラメータは各々0を指定して全体をマッピングする。

加えて、気をつけなければいけないことは。
1.ポインタ受け渡しのために、VB6で擬似的にポインタを代用しなければならない
2.オーバーフローすると落ちてしまう?指定したサイズ以上のデータを入れてはいけない。

API関数を使うことは初めてで、的外れなところがあるかもしれませんが。
よろしくお願いします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。