質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

3回答

1288閲覧

visual stdioで他プロジェクトから作成したexeの呼び出し

pikopaso

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2017/10/16 13:12

###前提・実現したいこと
visual stdioでプロジェクトから作成したexeを別のプロジェクト内のプログラムから呼び出したいです。
ソリューションに2つのAとBの2つのプロジェクトを作成しました。Bのプログラム内でAで作成したexeを呼び出したいのですが、方法がわからず困っております。
言語はC++でsystem関数を使おうと考えております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2017/10/16 14:51

"呼び出したい"と書かれていますが、単純に起動できればいいのですか? それとも何か処理をさせて結果が欲しいのですか?
pikopaso

2017/10/17 01:15

処理をさせて結果(戻り値)がほしいです。よろしくお願いいたします。
guest

回答3

0

起動方法は皆さんが書かれているので結果をどうやって受け取るかですが・・・
私がよく使うのは、’共有メモリに結果を書き出してもらう’ですかね?
起動する方、起動される方で取り決めをして「共有メモリ名」起動する方は共有メモリを確保したら起動されるプログラムの方で、その名前のメモリにアタッチして中を見る方法でしょうか?1対1でしかも結果だけが欲しいのなら排他も何もいりません。起動したプログラムが結果を書き終わった事の確認がとれればいいだけですから共有メモリのどこかにフラグ領域を取って0で初期化、書き終わったら1にする。起動したプログラムはフラグが1になるまで待って、結果を読み込む。雑になってしまいましたが、こんな感じですかね? 共有メモリについては検索かければいくらでもでてきます。ちなみにこんなページもあります。

投稿2017/10/17 14:33

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

visual stdioでプロジェクトから作成したexeを別のプロジェクト内のプログラムから呼び出したい

の意味がよく理解できていません。あるプログラムからどこかにある別のプログラムを実行させたい(visual stadio のプロジェクトには無関係に)の前提で言えば

system() 以外に exec() か spawn() 系のシステムコールを使う手が有ります。
system()でも構わないとは思いますが、それ以外なら spawn() 系列を使うのがいいのではないかと思います。
MSDNのページ
spawn系
exec系

何を使うにしろ、tacsheavenさんが回答に書かれている通り、実行しようとするプログラムがどこに有るかを知っていないと出来ません。

投稿2017/10/17 01:45

nob.

総合スコア711

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

system 関数は、基本的にはプログラムの「フルパス」が分からないと実行できません。
※PATH 環境変数が設定されていれば、その PATH 上にあれば実行できます

つまり、B プログラムが A プログラムのフルパスをわかっていないと呼び出せません。

なので、仮に A と B が同じフルパス上にあるならば、B が「自身の存在するパス」を調べたうえで、「そこにある A」を呼び出せばよくなります。
Windows API の GetModuleFileName を使えば自身の実行ファイルのフルパスが分かります。
※GetCurrentDirectory では、実行ファイルの位置とは限らないのでダメ

A と B が違うフルパス上にあるならば、どうにかして B に「A のある場所」を教えてやらねばなりません。設定ファイルだったり、実行時パラメータなりで。

投稿2017/10/17 01:18

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問