Q&A

  • c에서 사용하던 DLL호출 방법..


외부 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;



1  COMMENTS
  • Profile
    여영식 2000.01.12 01:13
    > 참고:

    > 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