• ベストアンサー

VisualC++2008 APIと共有メモリ・・・

お世話になります C++でAPIのインターフェースアドレスを共有メモリに配置して、 他のアプリケーションから使用する事は可能でしょうか? イメージとして CoCreateInstance( memA ); // memAは共有メモリに配置したい 他のexeより、memAを使用する これができるとして、ネットワークを介してでも問題ないでしょうか? まだまだ、勉強中なのですが御指導頂けたら幸いです よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8527/19385)
回答No.1

>C++でAPIのインターフェースアドレスを共有メモリに配置して、 >他のアプリケーションから使用する事は可能でしょうか? http://hp.vector.co.jp/authors/VA022047/linux/shm.html の「0.はじめに」を読んで下さい。 >イメージとして >CoCreateInstance( memA ); // memAは共有メモリに配置したい >他のexeより、memAを使用する 「同じ端末上の同じOS上で動いているアプリケーションであれば」、メモリを共有出来ます。 具体的には以下のページのようになります。 http://athomejp.com/goldfish/api/sharedmemory.asp これは「メモリを、CreateFileMapping()で、あたかもファイルのようにして扱い、アクセスの為のハンドルを共有」する事により、メモリを複数のプロセスで共有すると言う手法です。 「アクセス用ハンドル」はMapViewOfFile()により「実際のメモリ」に変換する事が出来ます。 >これができるとして、ネットワークを介してでも問題ないでしょうか? 出来ません。 CreateFileMapping()で作られた共有メモリは「同じ端末上の同じOS上で動いているアプリケーション同士」で共有されます。 「他の端末で共有する」には「ファイル共有のように、ネットワークを通して、実データを送受信」する必要があります。 もし、あるアプリケーションが「他のパソコン上にあった」として、それをクリックして起動しても「アプリ本体がネットワークを通って読み込まれ、このパソコンで起動されるだけ」です。 「アプリが置いてあったパソコン」では、何も起動されません。「共有メモリの対象アプリは、同一パソコン内のアプリ同士のみ」です。

関連するQ&A

  • C++ と HTML で、共有メモリ・・・

    お世話になります C++とHTMLで共有メモリを使用したいと考えています C++Builderを使用するので、C++とHTMLの起動されるアプリケーションは同じとなります 無理でしょうか? 最終手段として一時ファイルを使用する手を考えています よろしくお願い致します

  • js api

    javascriptにおいてapiと関数同じ物なのでしょうか? 以下引用 APIとは、アプリケーションプログラムインターフェイスの略語で、プログラミングの際に使用できる命令や規約、関数等の集合の事を指す。 ソフトウェア開発の際、いちから全てを作るより、APIを利用すればもともとあるプログラムを呼び出して、その機能を組み込んだソフトウェアを開発することができる。 APIの中に関数が含まれているという事でしょうか?

  • 共有メモリの削除

    Cでunix系のネットワークプログラムをくんでいます。 シェアードメモリ(共有メモリ)を使用して作業していますが、 あるブロックを指定して共有メモリを削除する方法はどうすればよいですか? *shmclientという構造体の共有メモリがあります。 n番目の共有メモリを削除したいです。 memcpy((char *)(shmclient+n), 0, sizeof(shmclient)); 上のように0(NULL)をコピーしましたが成功しませんでした。 よろしくお願いします。

  • Win32 APIでネットワークプログラミング

    ネットワークプログラミングをwin32 apiを使って したいです。 (1)ネットワーク関連のAPIとしては、socket, wininet の他にあるのでしょうか? (2)wininetの中でsocketが呼ばれているイメージで あっていますでしょうか? (3)socketが一番低レベルなAPIでしょうか?(win32 apiの中で)

  • 【c++】共有メモリについて

    【c++】共有メモリについて いつもお世話になっています。 共有メモリについて勉強していて、いろいろと調べていて気になったのですが、 「ファイルマッピング」と「メモリマップドファイル」とは 同じものなのでしょうか?全く違うものなのでしょうか? (ちなみに、これらは共有メモリを使用するための1つの方法である、という 認識で宜しいのでしょうか。) また、共有メモリのほうが、ソケット、パイプなどよりも高速アクセスできる 様ですが、どのぐらい高速なのか紹介しているサイトがありましたら 教えて頂けませんでしょうか。

  • Delphi6 DLL内でのメモリ共有(?)

    こんにちは、honiyonです。  複数アプリケーションからそれぞれコールバック関数を登録してもらい、状況に応じてそれぞれのコールバック関数を呼び出す、というDLLを作成しています。  しかし現在、呼び出しアプリケーションごとにメモリ空間が独立してしまい、コールバック情報を同一空間内で管理出来ずに困っています。  旧VerのDelphiで16bit DLLなら、interface部に定義した変数、オブジェクトはDLL内で同一空間内で共有出来るようですが、これをDelphi6 32bitDLLで行う事は不可能でしょうか? もしくは、その他の方法で独立メモリ空間を作らないようにする方法はありますでしょうか?  不可能な場合、CreateFileMappingが次に有効な手段として候補に挙がると思います。CreateFileMappingで管理クラスのポインタを渡してクラス共有というのは現実的な手法でしょうか?  よろしくお願いいます(..

  • メモリ管理機能

    OSのメモリ管理機能についておしえてください。 OSの機能にメモリ管理というのがありますが、これは 論理アドレスと物理アドレスのマッピングなど仮想記憶管理を行ったりしています、そのほか、アプリケーションの名前やデータサイズなども管理してるのでしょうか?(たとえば、Word.exeというプログラム名は論理アドレス何番から何番までに配置、xyz.mp3という名前のデータ名は論理アドレス何番から何番に配置といった感じで)

  • 64bit Linux上で32bitアプリケーションを使って共有メモリアクセス

    64bit Linux と共有メモリとの関係についてどなたか教えて いただけないでしょうか。  (現段階では、マシンもOSも64bitのものは無く、導入前での   検討段階です) 使いたいと思っているのは Red Hat Enterprise Linux 3.0 です。 現在動かしているアプリケーションが使っている共有メモリの サイズが大きくなってきたために64bitのLinuxを検討しています。 ただし、プログラム移行の手間を最小限にするめ、64bit環境上で 32bitライブラリにリンクしてmakeし直す程度の対応で済ませたいと 思っています(言語はCです)。 このような32bitアプリケーションが発行する共有メモリ関係の API‥たとえば、shmget()とかshmat()‥の呼び出しは、どこかの レイヤで最終的に64bit化されて動くと想像しています。 そうすると、32bit用のインターフェースに破綻を来たさない限りは、 総量で4GB超の共有メモリをアクセス可能(具体的には、総量として 4GBを越えて取得でき、参照時にはマッピングサイズが小さければ、 それらのいずれの部分もマッピングできる)と想像しているのですが そのような理解で良いでしょうか。 ちなみに、4GB超の大きなメモリを1つ使うわけではなく、100個前後 に分散した取得/マッピングをしています。つまり個々のブロックは 小さなサイズです。 よろしくお願いします。

  • 共有 USBメモリ

    USBフラッシュメモリをネットワークで共有設定しています。 共有設定がPCを起動のたびに解除されてしまいます。 常時、共有状態にするにはどうしたらよいのでしょうか? 使用OSビスタです。 説明不足の場合は補足説明いたしますのでご指摘ください

  • 1個のメモリを2個のCPUで共有する方法

    お世話になります。 1個のメモリを2個のCPUで共有する方法について、参考例教えてください。 メモリに画像を取り込み認識するのですが、処理速度向上のため、画像取り込みその他の仕事と、認識を分けてと考えています。 メモリを共有するときに気おつけ無ければならないことも御願いします。 よろしく御願いします。