안녕하세요.
이런 저런 삽질 끝에 잘 안되서 질문을 드립니다.
1. EXE파일
var
AFile: array[0..1024] of Byte;
begin
{ ...중략... }
bResult := ReadFileDLL(hFile, @AFileBuf, dwBufSize, dwCount);
=======================================
이렇게 DLL에 값을 던져 줍니다.
2. DLL
function ReadFileDLL(hFile: Pointer; AFileBuf: Pointer; dwBufSize:DWORD; var dwCount:DWORD): BOOL; cdecl; export;
begin
Result := frmMain.ReadFileDLL(hFile, AFileBuf, LongInt(dwBufSize), LongInt(dwCount));
end;
==========================================
이렇게 DLL 내에 있는 폼으로 다시 값을 전달해 줍니다.
3. DLL의 폼
function frmMain.ReadFileDLL(hFile: Pointer; AFileBuf: Pointer; dwBufSize:Int64; var dwCount:Integer): Boolean;
var
FileOffset: Int64;
begin
{ ...중략... }
dwCount := ReadFile(@hFile, FileOffset, TBytes(AFileBuf), 0, Length(TBytes(AFileBuf)) );
===========================================
dwCount := ReadFile(hFile, FileOffset, TBytes(AFileBuf), 0, Length(TBytes(AFileBuf)) );
딱 여기서 Access Violation이 떨어집니다.
이 ReadFile의 원형은
ReadFile(const Handle: Handle; FileOffset: Int64;
var Buffer: TBytes; Offset, Count: Longint): Longint;
이렇습니다.
TBytes(AFileBuf) 이게 문제가 되는거 같은데
형변환에 문제가 있는건지 Pointer 사용에 미숙해서 그런건지
정확한 원인 파악이 되질 않아서 마무리가 되질 않고 있습니다.
어디가 잘못된건지 아시는 분 조언 좀 부탁드립니다.