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);
:
: 뭐가 잘못됬지는 봐주세요
|