ページ 1 / 1
ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月24日(月) 15:25
by プラム
たとえばゲームの設定で反映して実行みたいなのあるじゃないですか。
それでやってみたんですが起動できす、そのまま終了してしまい、デバックでやってもそれ関係のものは何も表示されてなく、実行できませんでした。誰か教えてください。
その場所のコードは
コード:
system("GamePlay.exe");
です。
わかる人教えてください。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月24日(月) 16:05
by 初級者
何だか開きカッコが足りないような
気がするのはさておき...
system()
で実行したいexeファイルのパスは
正しく通っていますか?
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月24日(月) 16:52
by プラム
GamePlay.exeがある場所は設定.exeと同じ段階です。
これでできるはずですが・・・
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月24日(月) 17:07
by N.R
カレントディレクトリ(恐らくハルルンさんの言う"段階")は実行ファイルと同じとは限らないですが
他の問題かもしれないのでまずはフルパス指定でテストしてみてはどうでしょう
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月25日(火) 11:45
by プラム
フルパス指定?
C:・・・・・・
ってやってくの?
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月25日(火) 11:53
by みけCAT
ハルルン さんが書きました:フルパス指定?
C:・・・・・・
ってやってくの?
はい。
別にDドライブ上のファイルでもいいですけどね。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月27日(木) 09:38
by プラム
でもできません
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月27日(木) 10:10
by usao
とりあえず Cドライブ直下に適当にhello.txtとかいう名前のテキストファイルでも置いて
コード:
system( "C:\\hello.txt" ); //\を重ねて書くとかいう点で間違ってたりしないよね?
とかやってみてもダメでしょうか.
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月27日(木) 10:15
by プラム
同じフォルダにあるので/とか¥とか¥¥とか書かの¥なくてもいいと思うのですが・・・(フルパス指定で¥¥でやったけどできなかった)
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月27日(木) 10:16
by プラム
今やったら
Application "\??\C:\WINDOWS\system32\cmd.exe" found in cache
スレッド 'Win32 スレッド' (0x24) はコード 0 (0x0) で終了しました。
って出ました
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月27日(木) 11:32
by N.R
そんなに難しいものではないので
環境依存でなければパスが間違っているか GamePlay.exe がおかしいかとかないと思います。
パスの概念を正しく理解されていないようなのでパスが合っているという確証も持てないですね。
system の戻り値はどうなってますでしょうか
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月27日(木) 14:57
by milfeulle
まず初めに、プログラミングをする際、慣れない場合は日本語を入力するとき以外はIMEをいわゆる「直入力モード」にして下さい。
> フルパス指定で¥¥でやったけどできなかった
が文字通り「¥¥」と入力されたように受け取られてしまいます。数字も1234567890といわゆる半角で入力しましょう。スペースも常に半角にしておきましょう。ミスが減ります。
或いは、見やすいフォントがたくさんありますのでご検討下さい。「コーディング フォント」などで検索すると出てきます。
> 同じフォルダにあるので/とか¥とか¥¥とか書かの¥なくてもいいと思うのですが
これは難しい問題です。確かにほとんどの場合は同じフォルダにあれば、その実行ファイルと同じフォルダが「作業フォルダ」になります。そのため、同じフォルダにあるファイルを参照する場合は、/とか\とか書かなくても済みます。
なお、ご存じとは思いますが、\\と書くのは、C言語では\をエスケープシーケンスとしているからです。詳しくは「エスケープシーケンス C言語」で検索して下さい。
Windowsではフォルダといいますが、以下で述べるような、ハードディスクなどに実在する階層の名前としてはディレクトリと言います。
詳しくは「フォルダ ディレクトリ 違い」などで検索して下さい。
カレントディレクトリは、アプリケーションが変更できますし、起動時も指定できます。Windowsのコマンドプロンプトでcdというコマンドを使うとカレントディレクトリが変更できますが、この変更された状態で適当な階層にある.exeを起動すると、カレントディレクトリは変更されたままです。
.exeと同じディレクトリではありません
オフトピック
(コマンドプロンプトの例) C:\test\a.exeがあったとします。
cd C:\test
とすると、カレントディレクトリはC:\testになります。ここで
a.exe
と入力すると実行でき、カレントディレクトリはC:\testです。
さて、
cd ..\
とすると親のディレクトリに移ります。このときカレントディレクトリはC:\となります。ここでa.exeとしても実行できないので、test\a.exeとしてあげることで実行できます。このときのカレントディレクトリはC:\のままです!
(ショートカットファイルを作って、作業ディレクトリを指定した例) C:\test\a.exeがあったとします。このexeファイルのショートカット「a.exeへのショートカット」を作りました。このショートカットファイルを右クリックして、プロパティから「作業フォルダー」の部分をC:\とすると、このショートカットから実行したときに、カレントディレクトリが「作業フォルダー」のパスになっています。
さて、現在のカレントディレクトリーを表示することを考えてみましょう。WindowsAPIを用いて
コード:
#include <stdio.h>
#include <Windows.h>
int main(void) {
CHAR buffer[1024];
GetCurrentDirectory(1024, buffer);
printf("%s;", buffer);
getchar();
}
と書けます。これを実行して表示されたものがカレントディレクトリのパスと言うことになります。ご確認下さい。この表示されたパスもご期待通りだったらファイル名を疑って下さい。(うまくいかなければマルチバイトモードでビルドして下さい……)
そして、systemはそのアプリケーションが終了するまで待機します。従って、systemが戻り値を返したときは、その問題のアプリケーションが正常・異常にかかわらず終了したことを意味しています。問題はそのアプリケーションにあるかもしれません。
以上をまとめると、
1. ファイルパスが間違っているかもしれないと思い、確実に合っているだろうと考えられる絶対パス(\とか入っているもの)を指定する。特に、C(やDなどの)ドライブ直下に置いて確かめる。
2. できたらカレントディレクトリが間違っている可能性を疑い、カレントディレクトリを取得・必要なら設定する。(設定はSetCurrentDirectory関数でできます。)
3. カレントディレクトリに適当なテキストファイルなど、確実に開けるものを置き、System関数で開く。(テキストファイルなど拡張子によって関連づけられたアプリケーションが起動します。終了することでメインスレッドに処理が戻ります。)
4. 3までできたらGamePlay.exeをカレントディレクトリに置き、実行してみる。これで一瞬で終了してしまうなど不具合があれば原因はGamePlay.exeにあるため、そちらをなんとかする。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 14:53
by プラム
ほんとになんでなんだろうログにも何も残らずデバックしても何も残らない。
コード全体は↓(設定処理は抜いてあります)
Con.cpp
コード:
#include "main.h"
int End;
void Con(){//こんふてぃっくの略です
//略
if(End==2){ //1は反映して終了です。だから2です。
system("GamePlay.exe");
}
}
int ConEnd(){
return End;
}
main.cpp
コード:
#include "main.h" //ここに関数など定義が書いてあります。
int WINAPI WinMain( HINSTANCE , HINSTANCE, LPSTR , int nCmdShow ){
ChangeWindowMode( TRUE ) ;
DxLib_Init();
SetDrawScreen( DX_SCREEN_BACK ) ;
// ESCキーが押されるか、ウインドウが閉じられるまでループ
while(ConEnd()==0 && ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// 画面をクリア
ClearDrawScreen() ;
Con();
}
DxLib_End();
return 0;
}
とかいう感じです。
なにかわかったら教えてください。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 14:56
by みけCAT
まずインデントがおかしいですね。
あと、「//略」の部分の処理が間違っていて、Endが2でない可能性が考えられますね。
あと、「こんふてぃっく」という言葉を私もGoogle大先生も知らないのですが、どういう意味ですか?
[search=google]"こんふてぃっく"[/search]
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 15:06
by プラム
ごめんなさい 余分に文字などが入ってましたね。打ち間違えです。
コンフィグです。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 15:12
by プラム
インデントがおかしいのは僕の書き方なのですいません。
あと略の場所は(他もかなり省略してますが)
コード:
if(MOUS(MOUSE_INPUT_LEFT)==1&&x>15&&x<80&&y>440&&y<455){ //MOUSはマウスの入力を渡す関数でxとyマウスの座標です。
End=2;
}
です。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 15:20
by みけCAT
「何も残らない」とはどういうことですか?
MessageBoxなどで、system関数(を含むブロックの処理)が実行されていることは確認しましたか?
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 15:57
by へにっくす
ハルルン さんが書きました:今やったら
Application "\??\C:\WINDOWS\system32\cmd.exe" found in cache
スレッド 'Win32 スレッド' (0x24) はコード 0 (0x0) で終了しました。
って出ました
まさかとは思うけど、「コマンドプロンプト」って開けますか。
(スタートメニュー→アクセサリ→コマンドプロンプトとやって、「コマンドプロンプト」のタイトルをもったウィンドウが開けるかどうか)
system関数は、「コマンドプロンプト」の実体であるcmd.exeを呼び出す関数なので。
開けない(ショートカットのエラーがでるとか)のであれば、標準でついてくるはずのcmd.exeがないということなので、システムが壊れてるかもしれません。
system関数 - C言語関数辞典
あとN.Rさん(No.11)、milfeulleさん(No.12)のコメント見てますか。
無視しているように見えるのですが。
無視していないのであれば、ちゃんと返事を書いてください。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 17:19
by プラム
開けますよ!!!!!!!!!!!!!!!
コマンドプロント使ってるよ!!!!!!!!!!!!!!!
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 17:21
by プラム
みけCATさん>>ちゃんと反映して実行や反映して終了の描画したところをクリックすると終了します。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 17:47
by へにっくす
ハルルン さんが書きました:開けますよ!!!!!!!!!!!!!!!
コマンドプロント使ってるよ!!!!!!!!!!!!!!!
よしok
コード:
int ret = system(NULL);
として、retの値はどうなりましたか?
これで0以外が返ってくれば、環境としては問題ないです。
文字コードがUnicodeになってるとかではないですかね。ググってください。
0が返ってくる場合は、環境変数まわりを疑います。
オフトピック
しつこいですがNo.11、No.12をスルーしてるのは意図的ですか?
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 18:14
by プラム
文字コードは
Dxの設定の時にやってます。
戻り値は0が来たけど・・・なんでロゴにもデバックにも残らないんだろう・・・
あっあとなんかコマンドプロントのようなウィンド出るようになりました!!!!!!!
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 18:16
by プラム
あと無視しているつもりでは・・・
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 18:18
by みけCAT
system関数の利用を諦め、
CreateProcess関数を利用するのはどうですか?
ただし、起動したプロセスの終了を待つには別にコードを書く必要があります。
Re: ほにゃらら.eneからほにゃほにゃらら.exeを起動できない
Posted: 2014年3月30日(日) 18:24
by へにっくす
ハルルン さんが書きました:文字コードは
Dxの設定の時にやってます。
戻り値は0が来たけど・・・なんでロゴにもデバックにも残らないんだろう・・・
あっあとなんかコマンドプロントのようなウィンド出るようになりました!!!!!!!
戻り値が0?
コード:
int ret = system(NULL);
のretが0なのであれば、cmd.exeが呼び出せていないってことですけど。
環境変数はどうなってますか。
オフトピック
ハルルン さんが書きました:あと無視しているつもりでは・・・
私に言うのではなくて、No.11、No.12のレスをしてください。いい気分ではないのは確かです。
非表示エリア
この非表示エリアを表示するには、登録し、ログインする必要があります。