아래와 같이 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을 잘못 호출해서 그런건지 아니면 다른 부분에 문제가 있는건지 잘 모르겠어요...
^.^
그럼, 좋은 답변 부탁드립니다. 수고하세요.
이걸로는 잘 모르겠군요.
그래도 짐작가는 바를 적는다면..
Move(pBuffer, @lpWaveHdr^.lpData[0], nReadByte)
게 한번 해보세요.
즐푸하세여..
타락천사..