VCで作成した共有メモリをPHPから参照する方法

このQ&Aのポイント
  • VCで作成した共有メモリをPHPから参照する方法について相談です。
  • PHPの環境はWinXPのローカルPCにXAMPPを使用していますが、共有メモリを参照することができません。
  • Win32APIを使用して共有メモリを参照しようとしていますが、進展がありません。アドバイスをお願いします。
回答を見る
  • ベストアンサー

VCで作成した共有メモリは参照できないのでしょうか

PHP初心者です。 今、やろうとしていることはVC++(VisualStudio2003)で作成した共有メモリを PHPから参照しようとしています。 VC++で作成した共有メモリはchar[100]のみです。 今後拡張する予定ですが、基本的には32bit構造の型のみを予定しています。 現在のPHPの環境はWinXPのローカルPCにXAMPPにてApach2.2を起動させ、 PHPのバージョン5.3.5で開発をしているのですが、VC++の共有メモリを参照することができません。 今、PHPから、win32APIにて共有メモリを参照しようと思っているところですが、 なかなか思うように進みません。 よい方法をご存知の方、アドバイスをお願い致します。 また、この質問の内容は「どのような方法でも無理(できない)」ということであれば そのようなご指摘でも構いません。 それでは宜しくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>VCの共有メモリ 結論から言うと大変難しい。 (1)VCの共有メモリ  それはVCのソースレベルの話ですかね?  このメモリを利用できるのは一緒にリンク  されるオブジェクトだけです。  PHPはこのメンバーではないので無理です。 (2)誰がインスタンス化?  VCのメモリは誰が作るんでしょ?  PHPと違うプロセスで起動する場合は  「他のプロセスのメモリ参照」となるため、  OpenProcessを始めとする操作が必要と  なりますが、この辺のアーキテクチャは  ご存知でしょか? (3)アドレスの通知方法  (2)が分かるとして、メモリのアドレスを  どうやってPHPに知らせるんでしょう?  こういう連絡手段は結構面倒です。 ということで、VCでPHPから呼び出すDLLを 開発するプロダクトに切り替えては?

m_katsu
質問者

お礼

早速の回答ありがとうございます。 >ということで、VCでPHPから呼び出すDLLを  開発するプロダクトに切り替えては?  #1の方からも同じようなアドバイスを受けました。  dll内にデータクラスのような物をつくり、それをお互い(VC、PHP)で  共有するということにすれば共有メモリと同じような使い方ができるのでは  ないか?と考えます。  これから、PHPのdll開発方法を勉強します。  何か、dll開発に関して参考になるサイトや方法がありましたら、  教えて頂けると非常に助かります。  最初はどのように質問をしたら答えが見つかるかと不安でしたが、  よい結果になりました。  本当にありがとうございました。

その他の回答 (1)

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

外部プログラムのメモリを直接アクセスするのはあきらめた方が良いです。 目的が見えてこないので、そもそもメモリに直接アクセスする必要性が解りません。 VCでアクセスするメソッドなり関数を定義して引数を渡してはいけないのでしょうか?

m_katsu
質問者

お礼

ありがとうございました。 これから、PHPのdll開発を勉強することにしました。 何か、PHPのdll開発で参考になるサイト等をご存知でしたら 教えて頂けると非常に助かります。 この度は本当によい回答をありがとうございました。

m_katsu
質問者

補足

早速の回答ありがとうございます。 >外部プログラムのメモリを直接アクセスするのはあきらめた方が良いです。  これは無理と解釈してよろしいでしょうか。  無理ということであれば諦めます。 >目的が見えてこないので、そもそもメモリに直接アクセスする必要性が解りません。  このご指摘に関してですが、VCで作成したアプリケーション  (先ほどの共有メモリを使用します。)側の処理速度を落としたくないため、  実行中のファイル出力などをさせたくないのです。  そのため、お互いのメモリアクセスができないかと考えました。 >VCでアクセスするメソッドなり関数を定義して引数を渡してはいけないのでしょうか?  すいません。知識不足で理解できないのですが、  もう少しだけ具体的に教えて頂けませんでしょうか。  これはVCでdllを作成して、そのdllをPHPでも使用するということでしょうか?  図々しいとは思いますが、もう一つご質問させてください。  今回のようなケース(VC側の処理速度を維持したい)の場合、  どのような方法(技術)がありますか?安易な方法ですが、  私にはファイル共有の方法しか浮かびませんでした。  それでは宜しくお願い致します。

関連するQ&A

  • 複数の共有メモリの作成

    同じPC内に複数の共有メモリを作ろうとしています。自分の考えでは共有メモリを作成するときに shmget(key_t key, int size, int shmflg) のkeyを変えれば複数の共有メモリを作れると思ったのですがうまくいきません。ちなみにkeyは key = ftok(const char *pathname, int proj_id); で取得していて、pathnameとproj_idを変えればkey_tの値も変わり、複数の共有メモリが確保できると思ったのですが・・・。 また、ipcsで確認したところできた共有メモリのキーが0xffffffffになっているのも気になりました。普通は0x00000000になるべきなんでしょうか?

  • VC++にてCString型のフルパスをfopenする

    VC++(VisualStudio2005)にてCString型のフルパスをfopenしたいと思っています。 他ページでは char *name = new char[filepass.GetLength()+1]; strcpy( name, filepass ); でstrcpyでCstring→charへ変換できるとあったのですが、 'strcpy' : 2 番目の引数を 'CString' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 というエラーをはいて実行できませんでした。 lstrcpy(name, filepass)でも 1 番目の引数を 'char [100]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 となりました。 何か良い方法をご存じないですか? char型に変換できなくとも、結果的にfopenを使ってファイルオープンできれば良いです。

  • VisualStudio2010 DLL作成方法

    VisualStudio2010を使っています(初心者)。 VBで作成していたのですが、一部VC++を使わなければいけなくなりました。VC++はDLLで作成して、VBの方でDLLを参照して処理を行いたいと考えています。 そこで試しに作成したVC++で作成したDLLをVBで参照しようとしたらERRORになってしまい上手にできませんでした。※ERRORの内容までは詳しく覚えてません。VC++のDLLを作成~VBのDLLの参照までを説明しているサイトなどありましたら教えて下さい。 よろしくお願いします。

  • 共有メモリの削除

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

  • VC++2010 画面なしのアプリケーション作成

    VC++2010 画面なしのアプリケーションを作成したいんですが、VC++2010で作成する方法が調べても出てこなかったので質問させていただきました。 環境はWindows7で開発環境はVisualStudio2010 使用言語はC++です。 やりたいこととして、マイコンみたいにプログラムを組みたいと思っています。 メイン関数から始まって Wihile(1) ;で待機し SetTimer(1,1000,NULL)などのタイマ割込みで処理を行う形です。 よろしくお願いします。

  • VC++6で作成したDLLをVC++.NET2003から呼び出せますか

    現在、VC++.NET2003で作成しています。あるメーカから提供されているDLLがあるのですが、そのDLLとのリンクまではできたのですが、実行するとエラーになってしまいます。 (プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。) そのDLLはVC++6で作成したものらしく、マニュアルには、VC++6で作成したアプリケーションからの呼び出し方法が、記述されていました。 VC++6でアプリを作成すれば、正常に呼び出せることは明白なのですが、いかんせん、VC++.NET2003での開発が、ある程度進んでしまっていますので、いまからVC++6に切り替えるわけにもいきません。 それで、一般論として、確認したいのですが、VC++6で作成したDLLをVC++.NET2003で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)

  • PHPで自作DLLはどうやって作成するのでしょうか

    PHP初心者です。 PHPで使用する自作のDLLを作成したいのですが、 その環境を整備するのに困っています。 英語のマニュアルはあるようなのですが、理解に苦しんでいます。 現在の私の環境はWinXPで、 VC2003Proがインストールされており、追加でVC2008Expもインストールしました。 VC2008Expは上記の英語マニュアルに記載されていたので、インストールしたものです。 この他にはPHPの動作環境をセットアップするためにXAMPPというソフトで 環境を整備しました。 XAMPPではApache:2.2  PHP:5.3.5 がインストールされました。

    • 締切済み
    • PHP
  • vc++ グラフ作成

    visual c++ (visual studio)において、等高線グラフを表示させたいです。 等高線グラフの画像イメージを張り付けておきます。 http://www.fastpic.jp/images.php?file=0669754988.gif 3D点(x,y,z)の点(データ)を線で結びつけて、色付けしたものです。 【質問1】 この等高線を作成する手法、手段を教えて下さい。 ちなみに、チャートコントロール(mschar)↓では等高線をサポートしておらず、実現できません。 System::Windows::Forms::DataVisualization::Charting::Chart 【質問2】 Microsoft.Office.Tools.Excel.Char の用途/導入方法を教えて下さい。 Excelグラフでは等高線があり、添付画像もExcelで作成したので、 Excelのアドイン?みたいな物でグラフを作成して、それをFormに張り付ける、 的なことができるのかな、とも思いまして… ググってみたところ、Microsoft.Office.Tools.Excel.Char でグラフを作成できるのかな、 と思いました。 Microsoft.Office.Tools.Excel.Charの使い方というか、 そもそもこいつは何をするためにあるものでしょうか? 望みのことができますか? できるなら、どのように導入(参照設定やら名前空間やらツールボックスやら)できますか? [環境] visual c++ expressです。 visual studio 2012 へのアップグレードを検討中です。 よろしくお願いします。

  • VC++の印刷について

     VC++を勉強中のプログラミング初心者です。以前にC言語をかじった程度のレベルの者です。環境はOSはwindowsXPを、開発環境は VisualStudio2008professionalを使用しています。  現在VC++で簡単な家計簿ソフトを作成しているのですが、画面を印刷する方法が分かりません。メインフォーム画面をそのまま印刷したいのですが、どなたか方法(又は参考となる書籍、サンプルコード等)をご存知の方がいらっしゃいましたら、ご教授のほどよろしくお願い致します。m(_)m  

  • VCで作成したアプリを無音に

    VCで作成したアプリを無音に いつもお世話になっております。 現在アプリケーションを作成しているのですが、 そのアプリケーションに関してはまったくの無音にしたいのですが、 そのようなことは可能でしょうか? IEコンポーネントを用いて、web表示をし、 1秒ごとにIWebBrowser2->Navigateでページを更新しているのですが 毎秒、カチッという音がしてしまい、それを消したいと思っています。 http://www.usefullcode.net/2009/04/49_tabbrowser.html のページを元にやってみたら可能だったのですが、 管理者権限を必要とするようで、ユーザー権限だと普通に鳴ってしまいました。 今回はユーザ権限でも音を鳴らすことを防ぎたいので、ほかの方法を取ることになりました。 そこで、そのアプリケーションのみを完全に無音にするというのを思いついたのですが、 そのようなことは出来るのでしょうか? また、ほかにこんな方法でも出来そうではないかという案がありましたら ご教授していただけると助かります。 以上、よろしくお願いします。 開発環境:WindowsXP SP3      VisualStudio2005 VC++ ATL/WTL (MFC無し) 目標動作環境:WindowsXP,Vista,7         まずはXPで動かせることを目標ですが、最終的にはこの3種に対応したいです

専門家に質問してみよう