PROCESS_INFO pi;
INT argc;
WCHAR **argv;
DWORD i;
DWORD dwBufferSize = lstrlen(lpCmdLine)+MAX_PATH+1024;
LPSTR szShowBuffer = (LPSTR)MyAlloc(dwBufferSize);GetProcessInfo(&pi);
argv = CommandLineToArgvW(pi.szwCommandLine, &argc);
*szShowBuffer = NULL;
for (i=0; i<argc; i++)
{
  DWORD dwBufferSize = lstrlenW(*argv) + 1;
  LPSTR szMBArgv = MyAlloc(dwBufferSize);
  WideCharToMultByte(CP_ACP, NULL, *argv, -1, szMBArgv, dwBufferSize, NULL, NULL);
  argv++;
  lstrcat(szShowBuffer, "\n");
  lstrcat(szShowBuffer, szMBArgv);
  MyFree(szMBArgv);
}某本VC++书的例子代码,不懂C,盲目大致翻译如下,很明显是有问题的~   =_=||var
  pi: PROCESS_INFO;
  Argc: Integer;
  argv: PPWideChar;
  i: DWORD;
  dwBufferSize: DWORD;
  szShowBuffer: PChar;
  szMBArgv: PChar;
begin
  dwBufferSize := lstrlen(GetCommandLine()) + MAX_PATH + 1024;
  szShowBuffer := PAnsiChar(MyAlloc(dwBufferSize));  GetProcessInfo(@pi);
  Argv := CommandLineToArgvW(pi.szwCommandline, Argc);
  szShowBuffer := nil;
  for i:=0 to Argc-1 do
  begin
    dwBufferSize := lstrlenW(@Argv^) + 1;
    szMBArgv := MyAlloc(dwBufferSize);
    WideCharToMultiByte(CP_ACP, 0, Argv^, -1, szMBArgv, dwBufferSize, nil, nil);
    Inc(Argv, lstrlenW(@Argv^) + 1);
    lstrcat(szShowBuffer, #10);
    lstrcat(szShowBuffer, szMBArgv);
  //  MessageBox(0, szShowBuffer, '参数', MB_OK);
    MyFree(szMBArgv);
  end;
end;求调教,求指出指针错误~

解决方案 »

  1.   

    你翻译的是个啥啊,人家的很多函数,你照搬过来,delphi中没有,瞎弄
      

  2.   

    var
      pi: PROCESS_INFO;
      Argc: Integer;
      argv: PPWideChar;
    begin
      GetProcessInfo(@pi);
      Argv := CommandLineToArgvW(pi.szwCommandline, Argc);
      for i:=0 to Argc-1 do
      begin
      dwBufferSize := lstrlenW(@Argv^) + 1;
      szMBArgv := MyAlloc(dwBufferSize);
      WideCharToMultiByte(CP_ACP, 0, Argv^, -1, szMBArgv, dwBufferSize, nil, nil);
      Inc(Argv, lstrlenW(@Argv^) + 1);
      lstrcat(szShowBuffer, #10);
      lstrcat(szShowBuffer, szMBArgv);
      // MessageBox(0, szShowBuffer, '参数', MB_OK);
      MyFree(szMBArgv);
      end;
    end.我想问的是,关于这几处使用指针的地方是否正确?
    用WideCharToMultiByte第一次是可以成功取值的,但里面有乱码,循环执行第二次的时候就取值失败了.应该是我指针引用的地方写错了.