2012-03-02 10 views
0
が、私はこのような文字列で私のコードで画像や音声へのパスを定義

別のコンピュータC++でコードを実行している場合:は、コンテンツ(画像/音)を見つけることができません

「グラフィックス\ \ player.png」

私はまた、XMLファイルを通じてイメージをロードして、パスは次のようになります。

<グラフィックス\ tile1.png>

グラフィックフォルダは、プロジェクトのルートにある、それは私が使用しているコンピュータ上で完璧に動作します現像。

リリースビルドをビルドしてメインコンピュータから実行すると、Graphicsフォルダが.exeと同じフォルダにある場合、正常に動作します。

しかし、私が別のコンピュータから全く同じものを実行すると、画像やサウンドが見つかりません。

dllはおそらく正しいです、ゲームは正常に実行されます。

私はこれを、さまざまな仕様とドライバを持つ複数のコンピュータでテストしましたが、動作しません。

コンパイルされていないソースコードを別のコンピュータに移動してコンパイルすると、正常に動作します。

コンパイルされたコードを別のコンピュータで実行すると、何か不足していますか?

+0

'' Graphics \ player.png "'はC++文字列リテラルとして無効です。 –

+0

申し訳ありません、投稿に入力してください。それは "\\" C++の "\" in xml – Orujimaru

+0

次に、IDE(Visual Studio?)からプログラムを実行するときに、OSシェルを使って実行するときとは異なるカレントディレクトリがあると思われます。現在のディレクトリパスを表示してみてください。あなたが持っている2つの異なる状況でテストしてください。 –

答えて

2

相対パスを使用しています。これらのパスが参照するルートディレクトリのどこかでchdir()を実行しますか?

つまり、相対パスはどこにも使用しないでください。起動時にこれらを絶対にして、この問題が発生しないようにしてください。chdir()を呼び出すサードパーティ製のdllがリソースの読み込みを捨てることはありません。

+0

私はchdir()を呼びません。 はいの場合、どうすれば使用できますか? 絶対パスをハードコードする場合、パスはすべてのマシンで同一である必要があり、動作しません。 ありがとう、 Markus – Orujimaru

+0

chdir()を呼び出す必要はありません。あなたがする必要があるのは、あなたがパスを使うすべての場所で、それらのパスがファイルシステム上の同じファイルに解決されることを確認することです。相対パスの使用を主張している場合は、そのパスを使うたびに、正しい最上位ディレクトリにchdir()を呼び出すことができます。しかし、あなたが想像することができるように、ある時点で忘れてしまい、chdirが呼び出されたり、別のディレクトリからプログラムを起動したりすると、間違ったことが起きる可能性があります。間違っている。 – Roel

+0

もちろん、パスをハードコードするべきではありません。 GetModuleFileName()を使用するか、GetSpecialFolderPath()のアプリケーションのデータディレクトリ、またはディレクトリの名前を解決できる他の方法のいずれかを使用して、相対パスにデータディレクトリを追加するなど、実行時に絶対パスを絶対パスにする必要がありますデータが格納されます。したがって、アプリケーションでリソースをどのように整理して正確に行うかによって異なります。 – Roel

1

文字列を印刷して、プログラムを実行する場所からその正確な文字列を試してみてください。

あなたがデスクトップからプログラムを実行している場合や、そのプログラムを物理的な場所に相対的に使用しようとしている場合、それは動作しません。相対パスを使用しますから実行されます。この場合、絶対パスを使用します。

関連する問題