コマンドラインで渡す – プログラミング – Home

通知
すべてクリア

[解決済] コマンドラインで渡す


gofl
 gofl
(@gofl)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

コマンドライン引数で、aviファイル名の指定の、しかたを教えてください。

1 Dosプロンプトを開く。

2 ソースの、exeファイルを、
  Dosプロンプトに、ドラック&ドロップで、フルパスを渡す。

3 半角スペースをあけて、a.aviと入力

4 Enterキーを押す。

これでエラーになります。
やり方を教えてください。お願いします。

BCC Developer Borland C++ Compiler を使っています。

PSTR strFile;   //コマンドライン引数を、受け取る変数

LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {

static MCI_ANIM_OPEN_PARMS maop;
static MCI_ANIM_PLAY_PARMS mapp;
TCHAR strErr[1024];

switch (msg) {

case WM_DESTROY:
mciSendCommand(maop.wDeviceID , MCI_CLOSE , 0 , 0);
PostQuitMessage(0);
return 0;

case WM_CREATE:
maop.lpstrDeviceType = NULL;
maop.lpstrElementName = strFile;
maop.dwStyle = WS_CHILD | WS_VISIBLE;
maop.hWndParent = hWnd;

mciSendCommand(0 , MCI_OPEN , MCI_OPEN_ELEMENT |
MCI_ANIM_OPEN_PARENT | MCI_ANIM_OPEN_WS ,
(DWORD)&maop);

mciSendCommand(maop.wDeviceID , MCI_PLAY , 0 , (DWORD)&mapp);
return 0;
}
return DefWindowProc(hWnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hWnd;
MSG msg;
WNDCLASS winc;

strFile = lpCmdLine; //コマンドライン引数を渡す

以下ソース省略


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

lpCmdLineに実行ファイル名が含まれているとか。
lpCmdLineの値を調べてみてください。

ちなみに,CommandLineToArgvWなんてAPIもあります。


返信引用
んー
 んー
(@んー)
ゲスト
結合: 19年前
投稿: 14
 

カレントディレクトリにa.aviがないとか


返信引用
gofl
 gofl
(@gofl)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

回答どうもありがとうございます。

ソースは、以下アドレスの
ページの一番下のソースを使いました。

http://wisdom.sakura.ne.jp/system/winapi/media/mm3.html

a.aviファイルは、exeファイルと同じ、
Debugフォルダに入ってます。

どこが間違ってるんでしょうか。
もしも解りましたら、教えてください。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

フルパスでファイル名を指定しないと、パスが通っているところにファイルがあるもの
として解釈されます。

コマンドプロンプトを開いて CDコマンド 等でディレクトリを移動していない場合、
単に a.avi と指定すると、

C:\Documents and Settings\ゆーざめい

のところにあるものとみなしてしまいます。
(実際はPATHに設定されているフォルダはいかにあるものとみなすけど)

実際

C:\Documents and Settings\ゆーざめい>xxxx.exe

で実行しようとすると、

'xxxx.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と実行できないのはそういうわけで。

exeと同じフォルダにあると解釈させるにはプログラム側でそう解釈しないとダメです。
exeのあるフォルダのフルパスは GetModuleFileName でとれるので、
そこから _splitpath, _makepath(ともにVC用ですので対応するBCCのを使ってください)
でフルパスを求めてください。

>BCC Developer Borland C++ Compiler を使っています。
一応、ここは VC(=Microsoft Visual C++)の掲示板ですので、
ここで聞くのであれば、「VCではなくBCCの質問になってしまいますが」
等の断りを入れておいたほうがいいでしょう。
それが面倒なら BCCの掲示板や、VCのように限定していない掲示板で質問してくださ
い。


返信引用
gofl
 gofl
(@gofl)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

回答どうもありがとうございます。
>プログラム側でそう解釈しないとダメです。

そうなんですか。
なかなか難しいそうですね。

いろいろ参考になります!
本当にどうもありがとうございました。


返信引用
gofl
 gofl
(@gofl)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

回答どうもありがとうございます。
>プログラム側でそう解釈しないとダメです。

そうなんですか。
なかなか難しいそうですね。

いろいろ参考になります!
本当にどうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました