Q&A

  • OLEVariant을 델파이에서 어떻게 받는거죠?
델파이 7이구요.
OCX를 사용하고 있습니다.
OCX의 함수를 호출합니다. 그 함수의 리턴 타입이 Variant이구요

var vBuf : OLEVariant;
      vSize : Integer;
      ByteData : array of char;
begin
     vBuf :=  OCXXXXX.OnGetData(nCh);
     vSize := VarArrayHighBound(vBuf, 1) - VarArrayLowBound (vBuf, 1) + 1;
     //이렇게하면 ByteBuf의 Size는 정상적으로 리턴됩니다.

     SetLength(ByteData, vSize);
     CopyMemory(@ByteData , @vBuf, vSize);
     //ByteData에 데이터가 들오는데 정상적인 값이 아닌것 같습니다.
     //리턴되는 데이터가 일반적인 String이 아니라 Binary데이터라서  조금 더 힘들어지네요.

다른 방법으로 Variant값을 델파이의 char배열에 넣을 수 있을까요?






2  COMMENTS
  • Profile
    최용일 2005.10.19 17:43
    안녕하세요. 최용일입니다.

    VarArrayLock로 배열의 포인터를 얻어와서 작업해보세요...

    자세한것은 델파이헬프와 예제를 참고해보시구요...

    ^^ 항상 즐코하세요...

  • Profile
    이정관 2005.10.20 03:47
    procedure TForm1.Button3Click(Sender: TObject);
    var vBuf : OLEVariant;
          vSize : Integer;
          ByteData : array of char;
          gpDataArray : PByteArray;
    begin
         vBuf :=  OCXXXXX.OnGetData(nCh);
         if nCh = 1 then
           begin
             vSize := VarArrayHighBound(vBuf, 1) - VarArrayLowBound (vBuf, 1) + 1;

             SetLength(ByteData, vSize);

             gpDataArray := VarArrayLock(vBuf);
             CopyMemory(@ByteData , gpDataArray, vSize);
             VarArrayUnlock(vBuf);
         end;
    end;