Q&A

  • 배열을 포인터형 파라미터로..
비주얼 v++ 선언../////

DLLIMPORT void GetCaptureResult(BYTE* CaptureStatus);

BYTE        m_CurrentCaptureField;
BYTE        m_CurrentCaptureResult;
int         m_ReturnCameraNumber;

//함수
void COnAirGrabberView::GetCurrentCaptureResult()
{
        BYTE ReturnValue[3];
        GetCaptureResult(ReturnValue);
        m_CurrentCaptureField = ReturnValue[0];
        m_CurrentCaptureResult = ReturnValue[1];
        m_ReturnCameraNumber = (int)ReturnValue[2];
}
값을 이렇게 받아오는 함수가 있습니다..이것을 델파이로 구현을 하려고
합니다...

delphi/////
procedure GetCaptureResult(CaptureStatus : PByte); cdecl;

m_CurrentCaptureField : Byte;
m_currentCaptureResult : Byte;
m_ReturnCameraNumber : Integer;

procedure Tf_Camera.GetCurrentCaptureResult;
var
   ReturnValue : array[0..2] of byte;
begin
     GetCaptureResult(ReturnValue); //이곳에서 error 남니다..
// [Error] Camera.pas(86): Incompatible types: 'Array' and 'PByte'
end;
type이 달라서 그러는것 같은데 .. 어케 해줘야 할쥐..  
조언좀 부탁합니다...
3  COMMENTS
  • Profile
    홍성락 2002.03.20 06:01
    ////////////////////////////////////////////////////////////
    아래처럼 PByteArray를 사용해보세요
    포인터형에서 변수명과 @, ^를 적적히 사용해보세요

    procedure TForm1.BitBtn1Click(Sender: TObject);

    var
       ReturnValue : array[0..2] of byte;
    begin
       GetCaptureResult(@ReturnValue);
       Memo1.Lines.Add(intTostr(ReturnValue[0]));
       Memo1.Lines.Add(intTostr(ReturnValue[1]));
       Memo1.Lines.Add(intTostr(ReturnValue[2]));

    end;

    procedure TForm1.GetCaptureResult(CaptureStatus : PByteArray);
    begin
        CaptureStatus[0] := 1;
        CaptureStatus[1] := 2;
        CaptureStatus[2] := 3;
    end;
    ---------------------------------------------------------------
    PByte만 사용할경우

    procedure TForm1.BitBtn1Click(Sender: TObject);

    var
       ReturnValue : PByte;
    begin
       GetCaptureResult(ReturnValue);
       Memo1.Lines.Add(intTostr(ReturnValue^));

    end;

    procedure TForm1.GetCaptureResult(CaptureStatus : PByte);
    begin
        CaptureStatus^ := 123;
    end;
  • Profile
    김경록 2002.03.20 01:51
    델파이에도 포인트가 엄연히 존재합니다..
    procedure Tf_Camera.GetCurrentCaptureResult;
    var
       ReturnValue : ^byte;
    begin
         try
              Try
                    GetMem(ReturnValue, SizeOf(Byte) * 2);
              Except
                    ShowMessage('메모리 부족!!');
              end;
              GetCaptureResult(ReturnValue); //이곳에서 error 남니다..
         Finally
               FreeMem(ReturnValue);
         end;
    end;

    이렇게 하면 안될까여?
    문제는 없어 보이는데...  그쪽 참조할 함수가 없으니..
    어떻게 확인할 소지는 없군여..
    답변 되셨길...


                  최강의 프로그래머를 위하여~~~






  • Profile
    윤재항 2002.03.20 02:11



    우선 답변에 감사드리구요.. 그런데두 ...  같은자리에서 에러가 납니다..
    그럼 배열을 선어하고 .. 그배열을 포인터를 넘기는 방법은 없나여..
    아님 정의도니 함수 변환에 문제가 있는건지...
    procedure GetCaptureResult(CaptureStatus : PByte); cdecl;  //델파이
    DLLIMPORT void GetCaptureResult(BYTE* CaptureStatus); //비절씨

    다시함 봐주시면 .....