Q&A

  • DLL 사용시 액세스 오류가 나는데 한 번 봐주시면 감사하겠습니다.
아래와 같이 C로 선언된 DLL 함수를
BOOL DllOpen(const char *pszFileName);
int DllRead(char *pBuffer);


불러와 사용해야 하는데 델파이에서 어떻게 선언해주어야 하는지 몰라서요?
이렇게 하는 것이 맞나요?

interface
function  DllOpen(const sFileName: PChar): Boolean; stdcall;
function  DllRead(pBuffer: array of Char): Integer; stdcall;

implementation
function  DllOpen; stdcall;    external  'Engine.dll' name  'DllOpen';
function  DllRead; stdcall;    external  'Engine.dll' name  'DllRead';


위에 처럼 선언하고 아래와 같은 함수에서 수행하면...

procedure TFrmMain.OnWaveOutBufferLoad(Sender: TObject;
                                       lpWaveHdr: PWaveHdr;
                                       var MoreBuffers: Boolean);
var
        nReadByte        : Integer;
        sFileName        : String;
        pBuffer                : array[0..8000 - 1] of Char;
        
begin
        // 파일 이름 지정하고 기본적인 작업을 수행했다고 가정.
        ...

        DllOpen(PChar(sFileName));
        nReadByte := DllRead(pBuffer);

        Move(pBuffer, lpWaveHdr^.lpData^, nReadByte); <- 액세스 오류가 남 T.T
        lpWaveHdr^.dwBytesRecorded := nReadByte;
end;

대략 이렇게 썼는데

"Move(pBuffer, lpWaveHdr^.lpData^, nReadByte);" 이 부분에서 액세스 오류가
나네요.

제가 DLL을 잘못 호출해서 그런건지 아니면 다른 부분에 문제가 있는건지 잘 모르겠어요...
^.^

그럼, 좋은 답변 부탁드립니다. 수고하세요.
1  COMMENTS
  • Profile
    타락천사 2003.07.30 17:55
    안녕하세요. 타락임다..

    이걸로는 잘 모르겠군요.

    그래도 짐작가는 바를 적는다면..

    Move(pBuffer, @lpWaveHdr^.lpData[0], nReadByte)

    게 한번 해보세요.

    즐푸하세여..

    타락천사..