• ベストアンサー

【Visual Studio】プロジェクト間の変数のシェア

Visual StudioでプロジェクトA(親)とプロジェクトB(子)を変数でインターフェースさせる方法をご存知でしょうか? 端的な例としては: //プロジェクトB(子) int ctr = 0; int _tmain(int argc, _TCHAR* argv[]) { while(1){ ctr++; Sleep(1000); } } //プロジェクトA(親) int _tmain(int argc, _TCHAR* argv[]) { while(1){ printf("ctr = %d\n",ctr);//ctr seen in B Sleep(100); } } と、プロジェクトをインターフェースさせて一方向でもよいので変数をプロジェクト間で受け渡しさせたいのです。実際には別々の団体が開発するそれぞれのプロジェクトが大きすぎるので、1つのプロジェクトにまとめるよりはこのようにインターフェースさせるやり方を探していました。 Unix/LinuxではSWIGがこのようなことをできるようですが。Visual Studioソリューションでは複数プロジェクトの依存関係が設定できますが、説明を読むとこれは例えばサーバーとクライアントを同時開発する時の手間を省くときの用途で使うようなので、私がやりたいことはできないのかな?と、困っています。

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

  • ベストアンサー
回答No.1

ほぼ恐らく出来ないと思われます。 似たような処理ならば、「共有メモリ」を用いて処理を行う必要があると思います。 googleで「共有メモリ」で検索すれば、すぐに出てきます。

maruyl
質問者

お礼

OpenFileMappingやMapViewOfFileを使用して解決できました。遅れましたが、ありがとうございました。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

SWIGは全然別物だと思いますが。 異なるプロセス間でメモリを共有する事は「共有メモリ」と言う技術を利用します。ただし、同期が必要なので取り扱いには注意してください。 [必要知識] ・プロセス/スレッド間通信 ・プロセス/スレッド間同期 ・仮想記憶 ・共有メモリ ・当然ながらポインタ

maruyl
質問者

お礼

OpenFileMappingやMapViewOfFileを使用して解決できました。遅れましたが、ありがとうございました。

関連するQ&A

  • c++ TCHARで文字化け

    TCHARはUNICODEが扱えるときいたので早速つかってみた。以下は引数を表示するプログラムである。 Visual C++ Express Editionを使った。 #include <stdio.h> #include <tchar.h> int _tmain(int argc, _TCHAR* argv[]) { int i=0; while(i<argc){ _tprintf(_T("%s\r\n"),argv[i++]); } return 0; } しかし上記プログラムに日本語の引数をわたすと文字化けするではないか。なでしょうか?

  • matlabの変数をVisual Studioで

    matlabで計算を行い, その変数の値をVisual Studioで製作したプロジェクトで受け取るようなことをしたいのですが、そのような機能ややり方があったら教えてください. 使用しているソフトウェア matlab2015b visual studio 2012 opencv3.0.0 使用する言語 C++ OS Windows10

  • 文字配列から数値への変換

    MicrosoftのVisual-Studio 2005を使っています。 C/C++については、ほぼ素人で、困っています。 下記のような簡単なソースで、 456 012 678 を表示するようにしたいのですが、できなくて困っています。 最初の 123 789 345 は下記のソースで表記できたのですが、どうすればよいの でしょう? 数値をわざと文字列で読み込んで、これを 数値に変換しているのでややこしいのかもしれませんが、 できればこれでやりたいので、申し訳ありませんが、教えていただ けないのでしょうか。よろしくお願いします。 #include "stdafx.h" #include "stdlib.h" char str[3][200] = { "123 456", "789 012", "345 678" }; int _tmain(int argc, _TCHAR* argv[]) { int a[10]; for (argc = 0; argc < 3; argc++){ a[argc] = atof(str[argc]); printf("%d\n", a[argc]); }; return 0; }

  • C言語のprintfで桁数をそろえる

    次ので桁数をそろえると書いてあったけどやってみたらできなかった。 コンパイラはMS visual c++バージョンはおそらく7.1.3019 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a; scanf("%d",&a); printf("a=%3d\n",a); return 0; }

  • Visual Studio 2008でのC言語のサンプルコード実行につ

    Visual Studio 2008でのC言語のサンプルコード実行について教えてください。 他のプログラミング言語の経験はありますが、C言語とVisual Studioの開発環境は初めてでつまずいています。 C言語で書かれたたくさんのサンプルコードを、 Visual Studioと、Visual Studio コマンドプロンプトでテストしたいのです。 「test」というソリューション(プロジェクト)の下に、「新しいクラス」を追加して、 サンプルコードをコピペして、順次デバックでテストしようとしたところ、 ひとつのプロジェクトの中でmainが重複してしまいエラーになります。 main重複でエラーは当たり前とはいえ、 サンプルコードごとにプロジェクトを作成するのは大げさすぎる気がすることと、 体裁にこだわらず、とにかくデバックで各コードが動くことを確認したいこと、 サンプルコードの書き出し(main関数)などを修正してサブクラスに書き直してデバックすれば mainの重複とみなされず、手軽にVisual Studioでテストできるのではないかと やり方を調べています。 2つ目以降を、サブクラスにすればmainの重複がなくなるでしょうか? その場合、最初のmain関数 int main (int argc, char **argv) をどう修正すればいいのでしょうか。 それとも、何か別のやり方で、Visual Studioで手軽にテストする方法があるでしょうか。 調べてみたのですが、具体策がわからず困っています。 今回初めてVisual Studioに触れましたが、今後長く使いたいので別の環境に逃げずいろいろ勉強したいと思っています。 もし何かお心当たりがありましたら、ぜひ教えてください。 宜しくお願い致します。

  • _TCHAR*での引数の読み込み

    VC++2010での、通常の #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } のウィザードを使って、arvg[1]やargv[2]に引数を与えて、本体内で通常のCで使う printf("%s\n", argv[1]); や fopen(argv[1], "r"); を使いたいのですが、引数の型が_TCHAR*になっているため文字がそのまま使えません。 int main(int argc, char *argv[]) で使えば問題なく使えるのですが、デフォルトのウィザードを使った時の使い方を知っておきたいのです。 御経験のある方、御教示お願い致します。

  • visual studio 20008について

    私は、学校でvisual studio 2003を用いたプログラミングを行っております。家でもプログラミングを続行したく、今回、自宅のPCにvisual studio 2008を導入しようか検討しております。 そこで質問なのですが、visual studio 2003で作成したプロジェクトをvisual studio 2008でさらに編集を加え、再度visual studio 2003で続きを行う(その逆も)ことはできないのでしょうか。 調べてみるとvisual studio 2008ではFramework1.1が対応していないようなので、なんらかの方法を使ってvisual studio 2008でもFramework1.1での開発を可能にすることができるのか疑問に思い、お伺いしたいのです。 もしくは、visual studio 2008でビルドをかけた際、Framework1.1で対応していないものがあればビルドエラーを出す方法等あれば教えていただきたいのです。 お手数ですが質問にお答えいただけると幸いです。 よろしくお願いいたします。

  • 実行ファイルのメモリ上のアドレスについて

    実行ファイルのメモリ上のアドレスを以下の様に 書いて確かめましたがこのやりかたであっていますか? (=exeファイルがメモリ上に読み込まれているアドレス) また、実際にアドレスが表示されるのですが、このアドレスをみて 実際のメモリ本体のどこにロードされているかを理解する 必要はあるでしょうか? カーネルのプログラミングをしているときは必要? int _tmain(int argc, _TCHAR* argv[]) { printf("%p\n",_tmain); return 0; }

  • 解の個数の求め方

    1~500までの数字のうち、3と5で割り切れる数の個数を求める問題で, int _tmain(int argc, _TCHAR* argv[]) { int n=0; for(n=1;n<=500;n=n+1) if((n % 5)==0 && (n % 3)==0) printf("%d\n",n); return 0; } ここまでは出来たのですが、これだと解は出てきますが、個数ではないので、問題の趣旨と違いますよね; どうやればいいのか、だれか教えてくれませんか?

  • Visual C++でのfelicaプログラム

    SONYのサイトで、SDK for NFC Starter Kit が公開されているので、ためしにFelicaカードの読み取りプログラムを作ってみようと思っています。 サンプルとして、C++が載っていましたので、Visual C++ 2010で動かそうとしましたが、 「error LNK2019: 未解決の外部シンボル __imp__initialize_library が関数 _wmain で参照されました」と表示されます。 プロジェクトのプロパティで、C/C++ → 全般 → 追加のインクルードディレクトリ もSDKのincludeのディレクトリを指定しましたし、 同じく リンカー → 全般 → 追加のライブラリディレクトリ もSDKのlibのディレクトリを指定しました。 エラーを解決する方法を教えてください。 よろしくお願いします。 なお、プログラムは簡単な下記のものでもエラーがでます。 #include "stdafx.h" #include <cstdio> #include <cstdlib> #include "felica.h" int _tmain(int argc, _TCHAR* argv[]) { initialize_library(); return 0; }

専門家に質問してみよう