2011-12-03 22 views
2

クロスプラットフォームな方法で、私は多くの人が前にこの質問をしている知っているが、私の知る限り、C++初心者に役立つ明確な答えはありません。したがって、ここに私の質問(またはあなたが好きならリクエスト)、C++での外部ファイル(例えば実行ファイル)を呼び出す

私はXcodeまたは任意のテキストエディタを使用してC++コードを書いていると私は別のC++プログラムで提供されているツールのいくつかを使いたいと思います。たとえば、実行可能ファイルです。だから、どのように私のコードで実行可能ファイルを呼び出すことができますか?

はまた、私はC++プログラム内で提供される他の機能/オブジェクト/クラスを利用して、この呼び出し技術を経由して、私のC++のコードでそれらを使用することができますか?それとも、私が呼ぶことができる実行可能ファイルですか?

私は誰かが初心者が吸収できるという明確な答えを提供することができます願っています..:P

+0

あなたは 'exec *'のような意味ですか? – Shahbaz

+1

実行ファイルの最初の質問は、 'exec'や' system'のように聞こえます。 2番目のライブラリは[ライブラリ](http://en.wikipedia.org/wiki/Library_(computing)#Shared_libraries)です。 – birryree

答えて

3

だから、どのように私は私のコードでその実行可能ファイルを呼び出すことができますか?

最も簡単な方法はsystem()です。たとえば、実行可能ファイルがツールと呼ばれる場合、

system("tool"); 

ただし、この手法では多くの警告があります。この呼び出しは、オペレーティングシステムに何かを実行するよう要求しますが、各オペレーティングシステムは同じコマンドを別々に理解したり、応答したりすることができます。例えば

system("pause"); 

... exectuionを停止し、Windowsで動作しますが、ない他のオペレーティングシステムでます。また、ファイルへのパス内のスペースに関する規則も異なります。最後に、セパレータバーも異なる場合があります(ウィンドウのみの場合は '\')。

また、私は他の関数/オブジェクト/クラスをC++ から悪用して、この呼び出し手法を使ってC++コードで使用できますか?

実際はありません。他の人が作成したクラスや関数を使いたい場合は、ソースコードを取得してプログラムでコンパイルする必要があります。これはおそらく、ソースコードが十分に小さい場合には、これを実行する最も簡単な方法の1つです。

多くの場合、人々は便利なクラスおよび/または機能の集合体であるライブラリを作成します。ライブラリがバイナリ形式で配布されている場合は、dllファイル(または他のOSの場合は同等)と、ライブラリで提供されるクラスと関数を記述するヘッダファイルが必要です。これは、同じオペレーティングシステム内の異なるコンパイラで作成されたライブラリでも、互換性がない可能性があるため、C++プログラマの豊かな不満の源です。そのため、多くの場合、ライブラリがソースコード形式で配布され、前述のように、単一のファイルでバイナリバージョンを取得するための命令リスト(メイクファイルまたはさらに悪い)とヘッダーファイルが配布されます。 C++標準では、コンパイラの内部で起こる低レベルのものをしないため

です。コンパイラベンダーが望むように自由に放置された実装の詳細がたくさんあり、おそらくより良いパフォーマンスを達成しようとしています。これは残念ながら、単純なライブラリを配布するのは難しいということです。

+0

詳細なお返事ありがとうございます。さて、私は使用したいプログラムのソースコードを持っていると言います。そして、私は、メインコードを書いて、ソースコード内にメインコードを作成したいと考えています。私はMakefileを変更することでそれを行うことができると私は読んで、それを行う方法をある程度学んだ。しかし、このソースコードには、Makefile.am、Makefile.in、およびMakefileがあります。今はどちらを修正するのですか?それ以降は何をすべきか?私はこれが新しい質問であることを知っています。あなたが好きなら、私はそれを別の質問掲示板に書くことができます。 – stupidity

+0

http://en.wikipedia.org/wiki/Make_(software)を見てください。http://en.wikipedia.org/wiki/GNU_build_system Makefile.inとMakefile.amはAutomakeとAutoconfに関連していますが、 GNUビルドシステムの一部。ここをクリックしてください:http://stackoverflow.com/questions/2531827/what-are-makefile-am-and-makefile-in – Baltasarq

+0

リンクありがとう:D – stupidity

1

あなたは簡単に別のプログラムを呼び出すことができます - これは、プログラムの完全に別のコピーを開始します。 system()またはexec()ファミリの呼び出しを参照してください。

これは、テキストの入力ストリームを受け取り、何かを行い、その出力を次のプログラムに書き込む、たくさんの小さなプログラムがあるUNIXで一般的です。これらを使用すると、コードを書く必要なく、一連のデータをソートまたは検索できます。

Windowsでは、ファイルのデフォルトアプリケーションを自動的に起動するのが簡単なので、PDFファイルを作成してPDFを表示するためのデフォルトアプリを起動することができます。 Windowsで難しいのは、別のgiuプログラムを制御することです。プログラムが意図的にリモートコントロールを許可するように書かれていない場合(例えば、Windowsの場合はcom/ole)、ユーザーはそのプログラムで何もできません。

関連する問題