|
注释没有,看不懂就看到懂为止,多上机。
控制台、Win32、MFC程序都适用。
- #include <windows.h>
- #include <tchar.h>
- #if 0
- typedef struct _MYCMD
- {
- TCHAR *Cmd[20] = { 0 };
- int nLen = 0;
- }MYCMD, *LPMYCMD;
- MYCMD GetCmdLine(TCHAR *CmdLine)
- {
- TCHAR seps[] = _T(" ,\t\n");
- TCHAR *token1 = NULL;
- TCHAR *next_token1 = NULL;
- token1 = _tcstok_s(CmdLine, seps, &next_token1);
- MYCMD cmd;
- do
- {
- if (token1 != NULL)
- {
- cmd.Cmd[cmd.nLen] = token1;
- token1 = _tcstok_s(NULL, seps, &next_token1);
- cmd.nLen++;
- }
- } while (token1 != NULL && cmd.nLen < 20);
- return cmd;
- }
- #endif
- // 获取命令行参数,最多返回20个
- class MyCMD
- {
- public:
- MyCMD(TCHAR *szCMD);
- TCHAR **Get();
- ~MyCMD();
- TCHAR *Cmd[20] = { 0 };
- int nLen = 0;
- private:
- TCHAR *szCmd = NULL;
- };
- MyCMD::MyCMD(TCHAR *szCMD)
- {
- int size = _tcsclen(szCMD) * sizeof(TCHAR) + sizeof(TCHAR);
- this->szCmd = new TCHAR[size]{ 0 };
- memcpy_s(szCmd, size, szCMD, size);
- }
- TCHAR ** MyCMD::Get()
- {
- TCHAR seps[] = _T(" ,\t\n");
- TCHAR *token1 = NULL;
- TCHAR *next_token1 = NULL;
- token1 = _tcstok_s(this->szCmd, seps, &next_token1);
- do
- {
- if (token1 != NULL)
- {
- Cmd[nLen] = token1;
- token1 = _tcstok_s(NULL, seps, &next_token1);
- nLen++;
- }
- } while (token1 != NULL && nLen < 20);
- return Cmd;
- }
- MyCMD::~MyCMD()
- {
- delete[]szCmd;
- }
- int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPTSTR lpCmdLine, int nShowCmd)
- {
- //MYCMD cmd = GetCmdLine(lpCmdLine);
- MyCMD cmd(lpCmdLine);
- cmd.Get();
- if (cmd.nLen != 2)
- {
- MessageBox(NULL, _T("参数错误, 参数一为源文件,参数二为目标文件"), _T("错误"), MB_ICONERROR);
- return -1;
- }
- if (!CopyFileW(cmd.Cmd[0], cmd.Cmd[1], FALSE))
- {
- MessageBox(NULL, _T("复制失败"), _T("错误"), MB_ICONERROR);
- return -1;
- }
- #if 0
- LPWSTR *szArgv = NULL;
- int nArgc = 0;
- szArgv = CommandLineToArgvW(GetCommandLine(), &nArgc);
- if (nArgc != 3)
- {
- MessageBox(NULL, _T("参数错误, 参数一为源文件,参数二为目标文件"), _T("错误"), MB_ICONERROR);
- goto exit;
- }
- if (!CopyFileW(szArgv[1], szArgv[2], FALSE))
- {
- MessageBox(NULL, _T("复制失败"), _T("错误"), MB_ICONERROR);
- }
- exit:
- LocalFree(szArgv);
- #endif
- return 0;
- }
复制代码 |
评分
-
查看全部评分
上一篇: DLL“动态调用”的两种“姿势”下一篇: Win32 控件失能后的字体颜色修改
|