Q&A

  • DLL호출시 포인터 전달..
델파이에서 DLL 호출시 포인트 변수 호출이 되나요?

DLL호출 후 still_buf에 많은 데이터를 리턴 받아야 합니다.

still_size에는 버퍼에 저장된 데이터 량을 전달받구요.

DLL호출시 포인터 전달 방법이 잘못됐는지 봐주셔요.



컴파일 과정에 이런 에러가 발생합니다.

[Error] dvr.pas(291): Incompatible types: 'Word' and 'Pointer'



//-------------------------------------

function Bstore(still_point:word):integer; far; stdcall; external 'msbdll';



procedure TForm1.BitBtn14Click(Sender: TObject);



var

still_size:integer;

still_point:^word;

still_buf:array [0..10000] of word;



begin



still_point:=@still_buf;

still_size:=Bstore(still_point); //호출



end;

//----------------------------------------

1  COMMENTS
  • Profile
    여영식 2000.01.12 00:26
    > function Bstore(still_point:word):integer; far; stdcall; external 'msbdll';



    > procedure TForm1.BitBtn14Click(Sender: TObject);

    > var

    > still_size:integer;

    > still_point:^word;

    > still_buf:array [0..10000] of word;

    >

    > begin

    >

    > still_point:=@still_buf;

    > still_size:=Bstore(still_point); //호출

    > end;



    위 문장은 다음과 같이 수정되어야 합니다.



    > //-------------------------------------

    > function Bstore(still_point: LongInt):integer; far; stdcall; external 'msbdll';

    >

    > procedure TForm1.BitBtn14Click(Sender: TObject);

    >

    > var

    > still_size:integer;

    > still_point:LongInt;

    > still_buf:array [0..10000] of word;

    >

    > begin

    >

    > still_point:=LongInt(@still_buf);

    > still_size:=Bstore(still_point); //호출

    >

    > end;

    > //----------------------------------------



    Word 형은 2Byte 로 0..65535 범위밖에 갖을 수 없습니다. 따라서 메모리 주소를 전부

    표현할려면 4Byte형인 LongInt 형을 사용하셔야 합니다.

    그런데 에러는 Word 형으로 선언된 파라미터에 Word형의 포인터를 지정했기 때문입니다.