|
정진후 님이 쓰신 글 :
: 안녕하세요 정진후라고 합니다.
: 음- 저는 지금 이상한 문제에 봉착해있습니다.
: 클라이언트 서버환경에서 디비 대 디비간의
: 컨버전을 하는데 모든 다른 컴에서는
: 무척(?) 잘 돌아가는데 어제 테스트한 16기가짜리
: 하드가 달린 피시에서 테스트하니까
: 중간에 '뻑'하고 죽었습니다. 하드 용량이 부족하다는
: 메시지와 함께요.
: 물론 제가 하드의 남은 용량을 체크하고 있지는
: 않고요, 아마 볼란드가 템프파일 만들면서
: 체크를 하는 것 같습니다만, (메시지도
: C:\Temp\INMEM951.REM 이라고 나옵니다)
: 제가 쓰고 있는 빌더의 버전이 3이라 그런지
: 해당 라이브러리들이 2기가 이상의 드라이브를
: 인식하지 못하지 않나라고 생각됩니다.
: (API함수에서 GetDiskSpaceFree(맞나?) 는 2기가가 넘는 하드에서 잘 돌아가지 않고
: 이상한 값을 리턴하지요)
: 그러므로 이것이 어떤 패치를 통해서 해결 가능한 문제일까요?
: 답변을 기다리고 있겠습니다.
글쎄요,,,죽는 이유는 --님의 설명만으로는 알수가 없고요,,,
2Giga 이상일경우 Hard Disk Free Space를 Check하는 방법만 설명하겠읍니다.
우선 BCB 3에서도 이상이 없을 겁니다.
뭐 2Giga이상일 경우의 함수를 달리해야하는 이유는 건너가고,,
뭐 단도직입적으로 설명만합니다.
뭘 찾던 도중이라..
먼저 KERNEL32.DLL을 LoadLibrary합니다.
HINSTANCE 값을 선언한후 받으시면 되죠?
그리군 정상적인 값이 넘어오면 GetDiskFreeSpaceExA를 사용하시고
그렇지 않을 경우는 기존에 쓰셨던 방법으로 하시면 되고요,,,
정상적인값이라면 OSR2 또는 NT 4.0 또는 98 이여야겠죠?
여기서 주의하실점은 물론 GetDiskFreeSpaceExA를 Call하시면 안되고요,,
음,,,??///
그냥 써보죠,,,
IMPPROC Test_IMPPROC;
Test_IMPPROC = (IMPPROC) GetProcAddress(***LibraryLoad한 Instance값,"GetDIskFreeSpaceExA")하면 Address가 아니 Pointer라고 해야 좋겠죠? 넘어오면 그값으로 즉 그값에 Argument를 주시면 값이 Return되죠,,
즉 Test_IMPPROC(Drive,&A,&B,&C);
B가 Total Byte C가 FreeByte입니다. MS 도움밀을 참조하셔도 좋을듯 합니다.
LoadLibrary한후 FreeLibrary잊지 마시고,,
|