在win32中显示错误命令行字符串的消息

时间:2013-12-18 08:27:24

标签: c shell winapi command-line command-line-arguments

我有以下代码,它根据从命令行输入的命令行字符串调用两个不同的函数。我的应用程序名称是minopc.exe

所以当用户在命令提示符下输入以下代码时

minopc.exe -regserver 

srv.GBRegisterServer is called .

当用户在命令提示符下输入以下代码时

minopc.exe -unregserver 

srv.GBUnRegisterServer is called .

代码是

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    TCHAR *cmd_line = GetCommandLine();
    TCHAR *token;
    if ( (token = strchr(cmd_line, L'-')) == NULL ) token = strchr(cmd_line, L'/');
    if (token)
    {
         token++;
         if ( !lstrcmpi(token, LPCSTR("regserver")) || !lstrcmpi(token, LPCSTR("r")) )
         {
              srv.GBRegisterServer(&guid, L"WesOPC", L"WesOPC Server", L"WesOPC.Sample.MinOPC", L"1.0");
              return 0;
         }
         if ( !lstrcmpi(token, LPCSTR("unregserver")) || !lstrcmpi(token, LPCSTR("u")) )
         {
               srv.GBUnregisterServer(&guid);
               return 0;
         }
    }

现在我想显示错误,如果用户在minopc.exe -regserver和minopc.exe -unregserver旁边输入其他内容。但它接受其他命令,甚至在编写minopc.exe -a等时运行程序。

1 个答案:

答案 0 :(得分:0)

您不进行任何错误处理,接受任何其他参数。你要做的是

if ( lstrcmpi(token, LPCSTR("regserver")) || lstrcmpi(token, LPCSTR("r")) )
{
    srv.GBRegisterServer(&guid, L"WesOPC", L"WesOPC Server", L"WesOPC.Sample.MinOPC", L"1.0");
    return 0;
}
else if ( lstrcmpi(token, LPCSTR("unregserver")) || lstrcmpi(token, LPCSTR("u")) )
{
    srv.GBUnregisterServer(&guid);
    return 0;
}
else
{
    fprintf(stderr, "Invalid argument\n");
    return 10;
}