• ベストアンサー
  • すぐに回答を!

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

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数680
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.2
  • nda23
  • ベストアンサー率55% (773/1384)

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • VisualStudio2010 DLL作成方法

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

  • コンパイルせずにマクロの置き換えだけ実行(c言語)

     こんにちは。私はwin32APIを勉強しているc言語初心者なのですが、win32APIにはマクロで定義されたたくさんの新しい型があって、何がなんだか分からなくなります。なのでマクロの置き換えだけを実行してその新しい型がなんの型で出来ているのかを調べたいのですが、それをするにはどうすればいいでしょうか?使っているコンパイラはVC++2008です。回答よろしくお願いします。

  • OSはWindows Vista Home Premium を使ってお

    OSはWindows Vista Home Premium を使っております。 xampp-win32-1.7.3.exe をインストールしました。 php_editor_s133.zip を解凍してインストールしました。 ブラウザを立ち上げて http://localhost/ と打ち込んで Enterを押しました。 そうすると、「おめでとうございます。:システム上にXAMPPが正しくインストールされました。」 と出ました。 phpをプログラミングして、保存しようとしました。 ファイル→名前を付けて保存にして、保存場所をCドライブのProgram Files の中の Apach Group を探してもありません。どういうことでしょうか。 ちなみにスタート→すべてのプログラムを探してもApachに関する項目は出てきません。

    • 締切済み
    • PHP

その他の回答 (1)

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

関連するQ&A

  • OSはWindows Vista Home Premium を使ってお

    OSはWindows Vista Home Premium を使っております。 xampp-win32-1.7.3.exe をインストールしました。 php_editor_s133.zip を解凍してインストールしました。 ブラウザを立ち上げて http://localhost/ と打ち込んで Enterを押しました。 そうすると、「おめでとうございます。:システム上にXAMPPが正しくインストールされました。」 と出ました。 左の画面のphpinfo()をクリックすると、PHP Verson 5.3.1と出ました。 そして、 phpをプログラミングして、保存しようとしました。 ファイル→名前を付けて保存にして、保存場所をCドライブのProgram Files の中の Apach Group を探してもありません。どういうことでしょうか。 ちなみにスタート→すべてのプログラムを探してもApachに関する項目は出てきません。

    • ベストアンサー
    • PHP
  • DLL作成で外部参照エラー?

    VC歴1週間です。 現在VC++2010で動的ライブラリ(DLL)を作ろうとしていますが、 作成しようとしているDLL内部で使用している関数がLIB提供されていません。 このような場合、win32プロジェクト→dll作成 を選択した状態でプロパティ変更しないで、 DLLを作ろうとするとその関数が外部参照エラーになるかと思います。 このような場合、/FORCEで強制出力してしまって良いものでしょうか? それともVC++側の設定でエラーにならずDLL生成ができるようになるものでしょうか? linuxなら cc -shared -o foo.so foo.c でライブラリ等何も気にせずシェアードライブラリが作れたので困惑しています。 よろしくご教示お願いいたします。

  • Vector定義の配列の共有メモリ化

    Vectorの1次元配列(以下配列Vとします)を共有メモリとして、複数のアプリケーションで利用する方法がわかりません。開発ツールはVC++6.0 SP6です。 配列Vの値を参照時、書込時にはポインタ渡し(memcpy)をしたいです。コンパイルは通るのですが、アプリケーションを実行時にmemcpyを実行時に落ちます。 以下のことを確認しています。 (1)resizeでサイズは同じにしています。 (2)変数自体はNULLではありませんでした(デバッカで確認すると、アドレスがありました。) (3)変数の定義時にVectorにせず、サイズ決めた配列にするとポインタ渡しはできています。パラメータファイルを参照し、配列のサイズを決めたいので、ソース上に記入するのはできません。 よろしくお願いします。

  • 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種に対応したいです

  • ティアリングについて

    シューティングゲームを作ろうとしているのですがたまにティアリングがおきてしまい。困っています。見栄えが悪いので直したいのですが、どうしたらよいでしょうか?あとなぜこのようなことが起きたのか教えてくれればありがたいです。 ソースはいまないのですが、WIN32APIでティアリングを無くす方法があれば 教えてください。 環境はVC++2005です。

  • error C2664

    現在VisualStudio C++ 6.0にてプログラムを組んでいるのですが、以下のようなエラーが出ます。 型の変換ができていないであろうことはわかるのですが、解決方法がわかりません。 どのような解決方法があるのでしょうか? よろしくお願いします。 error C2664: 'strcat' : 1 番目の引数を 'unsigned char [256]' から 'char *' に変換できません。 (新しい機能 ; ヘルプを参照) 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。

  • 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を使ってファイルオープンできれば良いです。

  • クラスでスレッド作成

    VC++2008Express WIN32APIでRS232Cの通信用クラスを作成しています。 RS232Cの受信用スレッドを作成して 1ポートの受信処理をするようにはできます。 ですが ポート追加するたびにクラスをインスタンス化して受信用スレッドを 作成したいのですが、スレッド作成するには使用する変数などを staticにしないといけないため、クラスを複数インスタンス化できません。 どのような手法でクラスから複数スレッドを作成することができるのでしょうか? 分かりにくい説明ですが、参考になるものなどありましたら、 よろしくお願いします。

  • コンソールで文字に色を付ける

    コンソールで文字に色を付ける方法、Win32APIの関数をおしえてください。 また、これに対するSDKのインストール方法を教えてください。環境はVC++2005です。

  • リストボックスに文字列を入れる

    VC++のWin32APIで、通信で取得した文字列をリストボックスにいれたいのですが方法がわかりません。  どなたかよいアドバイスをよろしくお願いします。