本帖最后由 l0v3_y1n9 于 2012-02-09 23:00:39 编辑

解决方案 »

  1.   

    正常不代表就一定是对的procedure fun(var szNativeOs: PAnsiChar);
    var
      szRecv: Array[0..253] of Char;
      i,mlen: integer;
    begin
      FillChar(szRecv, SizeOf(szRecv), #0);
      szRecv[0] := 't';
      szRecv[1] := 'e';
      szRecv[2] := 's';
      szRecv[3] := 't';
      mlen := 0;
      for i:=0 to 253 do
            if szRecv[i]=#0 then
            begin
                    mlen := i+1;
                    break;
            end;  szNativeOs := AllocMem(mlen);
      StrCopy(szNativeOs, @szRecv[0]); //这里出错 求解释 szNativeOs定义为局部变量是正常的 唯独是函数var传递进去就出错
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      NativeOs: PAnsiChar;
    begin
      fun(NativeOs);
      MessAgeBox(0, NativeOs, nil , 0);
      FreeMem(NativeOs);
    end;
      

  2.   


    用szNativeOs := @szRecv[0]; 不会出错 如果不用申请内存的方式 请问这种写法是否恰当?
      

  3.   

    NativeOs未分配內存!!!
    传址方式,最好在调用前分配内存procedure TForm1.Button1Click(Sender: TObject);
    var
      NativeOs: PAnsiChar;
    begin
      szNativeOs := AllocMem(mlen);
      fun(NativeOs);
      MessAgeBox(0, NativeOs, nil , 0);
      FreeMem(NativeOs);
    end;