Q&A

  • 질문] 구조체 배열을 가지는 OleVariant 변환문제~
pCallbackData 파라메터가 구조체 배열을 가지는 OleVariant 타입입니다.
배열로 변환해서 값을 표시하는게 문제네요.
어느부분이 잘못 된것인지 부탁드립니다.
<!--CodeS-->
procedure TForm1.g_pAnnCom3AnnEventUserPosList(ASender: TObject; nResult,
    nDataCnt: Integer; var pCallbackData: OleVariant);
type
    TArrayData = array of record
        nPosCode: Integer;
        bstrPosName, bstrPhone: string;
        nPriceCode, nFreeSMSCnt: Integer;
        bInternationalCall, bPermitCIDtoFreePack: Boolean;
    end;

var i: Integer;
    PArrayData: TArrayData;

begin
    SetLength(PArrayData, nDataCnt);

    Move(pCallbackData, PArrayData, Sizeof(TArrayData) * nDataCnt);

     showmessage( inttostr( PArrayData[0].nPosCode ));  <- 정상값이 아님...
end;

<!--CodeE-->
1  COMMENTS
  • Profile
    최용일 2009.06.25 02:59
    내용을 보면 variant배열인것 같네요...
    VarArrayLock함수로 배열포인터를 가져와서 작업하세요...
    구조체안에 string형이 있는것은 좀 의문이네요...

    type
    PArrayData = ^TArrayData;
    TArrayData = array[0..0] of record // 혹은 TArrayData = array[0..데이터크기] of record
    nPosCode: Integer;
    bstrPosName, bstrPhone: string;
    nPriceCode, nFreeSMSCnt: Integer;
    bInternationalCall, bPermitCIDtoFreePack: Boolean;
    end;

    var
    P: PArrayData;
    begin
    P := VarArrayLock(pCallbackData);
    try
    뭔가 작업;
    finally
    VarArrayUnlock(pCallbackData);
    end;