델파이에서 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;
//----------------------------------------
> 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형의 포인터를 지정했기 때문입니다.