FreePascal Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
FreePacal 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

FreePascal Q&A
[154] 레코드 타입 변수 캐스팅?
MarunGuy [marunguy] 4157 읽음    2014-04-02 16:18
안녕하세요.

function Process32FirstW(hSnapshot: HANDLE; var lppe: PROCESSENTRY32W): BOOL; stdcall;
 
두번째 인자가 PROCESSENTRY32W 레코드타입에 대한 레퍼런스 타입입니다.
제가 선언한 레코드 타입 TESTRECORDW8 을 전달하려고 하는데 어떻게 해야하나요?
var
  proc_entry2: TESTRECORDW8; 
...
Process32FirstW(hdl, proc_entry2?????)
 
Process32FirstW(hdl, PROCESSENTRY32W(proc_entry2))
 
이렇게 하니 아래와 같은 컴파일에러가 납니다.
unitmain.pas(387,53) Error: Illegal type conversion: "TESTRECORDW8" to "tagPROCESSENTRY32W"

jwawindows 패키지의 레코드 타입들이 64bit 빌드시 패딩이슈가 있어서 잘못된 크기를 가지고 있습니다.
lazarus 1.2.0, codetyphon 4.8.0 모두 동일 증상입니다.
멤버가 똑같은 레코드타입을 다른 이름으로 선언하니 올바른 크기를 가지고 있습니다.
그래서, 테스트하기 위하여 새로 만든 레코드타입 변수를 인자로 전달하고 싶은데 어떻게 해야하나요?
type
  PPROCESSENTRY32W = ^PROCESSENTRY32W;
  {$EXTERNALSYM PPROCESSENTRY32W}
  tagPROCESSENTRY32W = record
    dwSize: DWORD;
    cntUsage: DWORD;
    th32ProcessID: DWORD;          // this process
    th32DefaultHeapID: ULONG_PTR;
    th32ModuleID:DWORD;            // associated exe
    cntThreads: DWORD;
    th32ParentProcessID: DWORD;    // this process's parent process
    pcPriClassBase: LONG;          // Base priority of process's threads
    dwFlags: DWORD;
    szExeFile: array [0..MAX_PATH - 1] of WCHAR;   // Path
  end;

type
  TESTRECORDW8 = record
    dwSize: DWORD;
    cntUsage: DWORD;
    th32ProcessID: DWORD;          // this process
    th32DefaultHeapID: ULONG_PTR;
    th32ModuleID:DWORD;            // associated exe
    cntThreads: DWORD;
    th32ParentProcessID: DWORD;    // this process's parent process
    pcPriClassBase: LONG;          // Base priority of process's threads
    dwFlags: DWORD;
    szExeFile: array [0..MAX_PATH - 1] of WCHAR;   // Path
  end; 

+ -

관련 글 리스트
154 레코드 타입 변수 캐스팅? MarunGuy 4157 2014/04/02
155     Re:레코드 타입 변수 캐스팅? MarunGuy 4130 2014/04/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.