외부 DLL을 호출하는데 프로그램이 다운되요.
C에서 사용하는 DLL을 델파이에서 사용하려합니다.
아래 코딩을 보시고 조언 부탁합니다.
'이 프로그램에서 잘못된 연산을 수행하여 종료됩니다'
어쩌고 저쩌고.. 에러가 발생합니다.
참고:
LoadBuf DLL 함수를 호출하면 'Buffer' 버퍼에 많은
데이터가 반납되어 돌아오는 함수입니다.
// C에서는 이렇게 코딩 ------------------------------------
WORD *Buffer;
Integer Buffer_Size;
Buffer=new WORD[1000];
Buffer_Size=LoadBuf(Buffer); //외부 DLL함수 호출
// 델파이에서는 이렇게 코딩 -------------------------------
var
Form1: TForm1;
Buffer_Point:^longint; // 포인터 변수
Buffer:array [0..1000] of word; //버퍼
implementation
{$R *.DFM}
:
:
:
procedure TForm1.BitBtn14Click(Sender: TObject);
var
Buffer_Size:longint;
begin
Buffer_Point:=@Buffer;
new(Buffer_Point); //메모리 할당
Buffer_Size:=LoadBuffer(Buffer_Point^);
form1.caption:=inttostr(Buffer_size); //사이즈 화면에 표시
dispose(Buffer_Point); //메모리 반납
end;
> var
> Form1: TForm1;
>
> Buffer_Point:^longint; // 포인터 변수
> Buffer:array [0..1000] of word; //버퍼
>
> implementation
>
> {$R *.DFM}
> procedure TForm1.BitBtn14Click(Sender: TObject);
>
> var
> Buffer_Size:longint;
>
> begin
>
> Buffer_Point:=@Buffer;
> new(Buffer_Point); //메모리 할당
> Buffer_Size:=LoadBuffer(Buffer_Point^);
> form1.caption:=inttostr(Buffer_size); //사이즈 화면에 표시
>
> dispose(Buffer_Point); //메모리 반납
> end;
>
이 소스의 문제를 잠시 살펴보겠습니다.
이미 버퍼가 1001 바이트가 잡혀 있는데 또다시 버퍼에 새로운 메모리를 할당하고 있습니다.
Buffer:array [0..1000] of word;
new(Buffer_Point);
따라서 둘 중에 하나는 없어져야 할 것 같습니다.
에러는 다음 부분에서 발생하는것 같습니다.
Buffer_Size:=LoadBuffer(Buffer_Point^);
이미 Buffer_Point 값 자체는 버퍼의 주소를 갖고 있는기 때문에 다음과 같이
바꾸어야 합니다.
Buffer_Size:=LoadBuffer(Buffer_Point);
즉 Buffer_Point^ 가 아니라 Buffer_Point지요. 잘 생각해보시면 알 수 있을 것입니다.
그래도 안되면 Dll 측 소스를 보내주시면 제가 시험해 드리겠습니다.
iamsik@hanmail.net