Q&A

  • [질문] array of Byte와 Pointer
안녕하세요.

이런 저런 삽질 끝에 잘 안되서 질문을 드립니다.


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 사용에 미숙해서 그런건지

정확한 원인 파악이 되질 않아서 마무리가 되질 않고 있습니다.

어디가 잘못된건지 아시는 분 조언 좀 부탁드립니다.
0  COMMENTS
    • 이건희
    • 2010.01.23 02:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2010.01.23 09:19
      꼭 델파이랑 그래픽 카드라고 할 수는 없는듯해요, 사용하는 함수나 컴포넌트중 그래픽카드의 특정 부분...
    • 아이에스
      2010.01.23 02:46
      UserName = SYSDBA Password = masterkey
    • 이용벽
    • 2010.01.22 19:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장성호
      2010.01.22 20:10
      메뉴에서 1) "File"->"New"->"Frame"을 클릭하세요 2) 그러면 폼과 같은 디자인 화면이 나옵니...
    • 이강석
      2010.01.20 18:16
      30일 밖에 못 쓰는게 맞는거 같은데요~~아니면 돈 주고 사시던가해야 할꺼예요~~물론 어둠의 경로로 까시...
    • 엄마미안
      2010.01.20 20:03
      학습목적인데 정품을 구매하긴 아무래도 부담이 가실겁니다. 어둠의 경로에서 델20XX 시리즈를 제외한 하...
    • 뉴비
      2010.01.21 06:07
      감사합니다. ㅠ 어둠의 경로를 뒤져야 겠군영
    • 띵아
      2010.01.30 02:15
      아 어둠의 경로 ^^ 쩝
    • 아르스
      2010.01.20 23:37
      var result : array[0..15] of Char; StrM : String; I : Integer; 이 부분을 아래처럼 바꿔...
    • 극상초보
    • 2010.01.19 19:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이강석
      2010.01.19 20:58
      영어가 짧아서...원하시는 기능을 한글로 써주세요..
    • 혀노
    • 2010.01.19 02:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2010.03.08 23:13
      영상사이즈가 크다면 CPU문제가 생길수있습니다. 일단 제가보기에는 비디오 믹서를 사용해서 작업을 ...
    • 박상윤
      2010.03.08 23:15
      필요하시면 spy7111@naver.com 메일주세요. 자세히 설명해드릴께요.^^
    • 최진영
    • 2010.01.18 08:56
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 언제나초보
      2010.01.18 18:32
      GROUP BY C_NAME, TEL, (Addr_dong+Addr_bungi+Addr_Hosu+Addr_bild)
    • 이용벽
      2010.01.18 22:24
      where 와 Group by는 동시에 작동이 안됩니다. 그리고 참고로 Group by 나 Order by가 있으면 Query 수...
    • 엄마미안
      2010.01.20 20:07
      무저건 where절과 group by가 동시 작동이 안되는게 아니라. where 전에 체크하는 컬럼이 그룹바이에 엮...
    • 이용벽
      2010.01.22 18:17
      몇년 전에 비슷한 문제로 고생하다가 겨우 해결하고 넘어간 기억이 있습니다. 그때 더 이상 자세히 뜯어...
    • 이강석
      2010.01.16 03:11
      sTemp := Format( '%.2d', [Result[16]] ); 이라네요..검색했더니..^^
    • 홍성락
      2010.01.16 03:18
      도움말보시면 x형에서는 자릿수가 남으면 0으로 자동 처리됩니다. '%.2x'로하세요. Format('%.2x', [re...
    • 극상초보
      2010.01.19 18:31
      이강석님,홍성락님 정말로 감사드립니다. 덕분에 문제가 잘 해결
    • 극상초보
      2010.01.16 00:14
      result[0],result[1],result[2],result[3]에 들어 가 있는 데이터를 따로따로 String 타입으로 변경하고 ...
    • 홍성락
      2010.01.16 00:52
      Edit2.Text := String(@result); 이렇게해보세요 배열중 아스키 코드를 넣었으면 문자로 될겁니다. 배열...
    • 극상초보
      2010.01.16 01:14
      홍성락님 정말 감사합니다. 많은 도움이 되었습니다..^0^ 복받으실꺼예요!!!
    • 이강석
    • 2010.01.15 20:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이강석
      2010.01.18 22:38
      CPU 100%-_-;;;;;;;
    • 박성훈
    • 2010.01.15 07:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2010.01.15 07:41
      해결했습니다.
    • ♡러브히나™
      2010.01.15 05:45
      Function Get_KoreanCharPos(letter: String; WishCnt: Integer): Integer; Var i, msb ...
    • 최용일
      2010.01.15 20:08
      ByteType이란 함수를 쓰시면 쉽게 할 수 있습니다. if Length(sString) > 40 then L := 40; If ...
    • 이의성
      2010.01.16 03:52
      감사합니다~~ 그런데, If ByteType(sString, L) = mbTrailByte then Dec(L); 에서 '='...
    • 장덕곤
    • 2010.01.15 01:43
    • 0 COMMENTS
    • /
    • 0 LIKES
    • delpia
    • 2010.01.14 18:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2010.01.15 02:03
      이미지에 보니... LoginPrompt 가 true인데요.. false이면 안 물어보지 않을까요? ^^
    • phono
      2010.01.14 18:20
      부팅시 실행시키고자 하는 본인 프로그램을 서비스 형태로 등록시켜놓되.. 실행금지목록 리스트 또는 ...
    • 이강석
      2010.01.14 20:59
      네..한 이틀 고민했는데..방법이 그것 밖에 없네요..^^감사~~