Win32 ApplicationのパラメータつきでVCを起動するには?

解決


マミ  2004-01-06 09:20:48  No: 52963  IP: [192.*.*.*]

お世話になっております。

過去スレでargvやm_lpCmdLineなど書いておりますが、
Win32 Applicationではどのようにしたら良いのですか?

編集 削除
なーめ  2004-01-06 11:04:28  No: 52964  IP: [192.*.*.*]

>> Win32 ApplicationのパラメータつきでVCを起動するには?
もうすこしまじめにタイトルを考えてくださいな。
意味不明ですよ。

おそらく、
Win32 Application でコマンドライン文字列を受け取る方法は?
ということですね。

プロジェクト新規作成のウィザードで自動生成させると、

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
...
}

が生成されます。

この引数の

LPSTR lpCmdLine

がパラメタ文字列です。

int main( int argc, char * argv[] )

みたいに分割されていません。
コマンドラインに入力した文字列そのものです。
sscanf()

あたりで分割するか、

char * p;
for( p = lpCmdLine; *p; p ++ )
{
}
で左から1文字ずつチェックするか、
ですかね。

編集 削除
Toshi  2004-01-06 11:28:46  No: 52965  IP: [192.*.*.*]

この程度のサンプルならWEBでちょっと検索すればゴロゴロしてると思いますので、せっかくインターネットをお使いなのですから、もう少し活用方法を考えてみてはいかがでしょうか。下記は常套ソースです。

#include <windows.h>
#include <stdio.h>
#include "TCHAR.H"

LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2)
{
    while (p1 != NULL && *p1 != NULL)
    {
        LPCTSTR p = p2;
        while (p != NULL && *p != NULL)
        {
            if (*p1 == *p) return CharNext(p1);
            p = CharNext(p);
        }
        p1 = CharNext(p1);
    }
    return NULL;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
    TCHAR szTokens[] = _T("-/");
    LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens);
    while (lpszToken != NULL){
        if (lstrcmpi(lpszToken, _T("A"))==0){
            // specified /a option
        }
        else if (lstrcmpi(lpszToken, _T("ABC"))==0){
            // specified /abc option
        }
    }
    return 0;
}

編集 削除
マミ  2004-01-06 14:47:29  No: 52966  IP: [192.*.*.*]

なーめさん、  Toshiさん  
お返事ありがとうございます。
ゴメンなさい。初歩的な質問で。。。
いろいろと検索したんですけどね・・・
検索の仕方が悪いと言えばそれまですけど・・・  (^^;
ご指導ありがとうございました。

編集 削除