コマンドラインで渡す

[戻る]
gofl 2007/02/22(木) 18:41:01
コマンドライン引数で、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 [E-Mail] 2007/02/22(木) 19:12:18
lpCmdLineに実行ファイル名が含まれているとか。
lpCmdLineの値を調べてみてください。

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

んー 2007/02/22(木) 19:55:27
カレントディレクトリにa.aviがないとか

gofl 2007/02/22(木) 20:13:28
回答どうもありがとうございます。

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


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


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

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

Blue 2007/02/22(木) 20:54:54
フルパスでファイル名を指定しないと、パスが通っているところにファイルがあるもの
として解釈されます。

コマンドプロンプトを開いて 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 2007/02/25(日) 22:51:43
[[解決]]
回答どうもありがとうございます。
>プログラム側でそう解釈しないとダメです。

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

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

gofl 2007/02/25(日) 22:51:43
[[解決]]
回答どうもありがとうございます。
>プログラム側でそう解釈しないとダメです。

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

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

古いスレッドには追加発言できません。