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

델파이 Q&A
Delphi Programming Q&A
[12278] Re:Re:c++ 델파이변환 ... Acess Violation 00000 오류 ㅠㅠ
김지성 [kidream] 2063 읽음    2008-11-14 18:19
제가 봤을땐 조금 다르게 고쳐야 할듯 합니다.
우선 C 함수 원형을 보면 TDiskList라는 record에 데이터를 채워 리턴 해주는 것 같고, 뒤에 ErrorCode에서는 에러코드가 채워지는 거 같네요. 그렇다면...
function SKY_ScanSupportedDisk(var DiskList:TDiskList;var dwErrorode:DWORD):DWORD; stdcall; external 'SkyUSBD.dll';

소스도 너무 복잡하게 하지말고 그냥 local 변수로 선언해서..

var
   sDiskList : TDiskList;
   dwError:DWORD;
   Count:DWORD;
begin
     FillChar(sDiskLIst, SizeOf(TDiskList), #0);
     Count:=SKY_ScanSupportedDisk(sDiskLIst,Error);

  /// 뒤에서는 sDiskList를 원하는대로 써먹는 코드 줄줄줄...

end;


GomSun2 님이 쓰신 글 :
: C문법을 몰라 델파이코드만 보고 수정했습니다.
:
: var
:   sDiskList : ^TDiskList;
:   Error:LPDWORD;
:   Count:DWORD;
: begin
:   New(sDiskList);
:   try
:     FillChar(sDiskLIst^, SizeOf(TDiskList), #0);
:     Count:=SKY_ScanSupportedDisk(sDiskLIst,Error);
:   finally
:     Dispose(sDiskList);    // 소멸
:   end;
:
: 델초보 님이 쓰신 글 :
: : ===============================================================================================
: : 컨버팅한 function
: :  function SKY_ScanSupportedDisk(var DiskList:PDiskList;lpErrorode:LPDWORD):DWORD; stdcall; external 'SkyUSBD.dll';
: : type
: :   TDiskList = packed record
: :  // TDiskList = record
: :     DevicePath:array[0..MAX_PATH-1] of byte;
: :     DeviceSN:array[0..25] of Byte;
: :     DeviceType:byte;
: :     Lun:byte;
: : end;
: : 델파이 변환
: : sDiskLIst : PDiskList;
: : Error:LPDWORD;
: : Count:DWORD;
: : begin
: : getMem(sDiskList, SizeOf(sDiskList)*25);     // 생성
: : FillChar(sDiskLIst,sizeof(tDiskLIst)*25,$0);
: : Count:=SKY_ScanSupportedDisk(sDiskLIst,Error);=> Acess violaction 0x0000000 이나옵니다 ㅜㅜ
: : 실행후 Acess Violation
: : FreeMem(sDiskList, SizeOf(TDiskList) * 25);    // 소멸
: : ===============================================================================================
: : extern "C" DWORD    SKY_ScanSupportedDisk(DiskList *sDiskList, LPDWORD lpErrorode);
: : 원형함수
: : dwErrorCode LPDWORD;
: : Count integer
: : DiskList *sDiskList;
: : sDiskList = (DiskList*)malloc(sizeof(DiskList)*25);
: : memset(sDiskList, 0x00, sizeof(DiskList)*25);
: : count=SKY_ScanSupportedDisk(sDiskList, &dwErrorCode);
: :
: : 뭐가 잘못됬지는 봐주세요

+ -

관련 글 리스트
12272 c++ 델파이변환 ... Acess Violation 00000 오류 ㅠㅠ 델초보 1592 2008/11/12
12273     Re:c++ 델파이변환 ... Acess Violation 00000 오류 ㅠㅠ GomSun2 1696 2008/11/13
12278         Re:Re:c++ 델파이변환 ... Acess Violation 00000 오류 ㅠㅠ 김지성 2063 2008/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.