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

델파이 FAQ
Delphi Programming FAQ
[30] 윈도우 9x/2000에서 variant에 Int64 값을 사용하면 에러 발생
박지훈.임프 [cbuilder] 5306 읽음    2008-03-04 16:16
  • 제품 이름: 델파이
  • 제품 버전: 2006
  • 제품 요소: 컴파일러
  • 플랫폼/OS 버전: Win32

윈도우 2000에서 variant 타입 varInt64가 문제가 되는 이유는, 단지 윈도우 2000이 이 타입을 지원하지 않기 때문입니다.

이 문제를 확인하기 위해서는 다음과 같은 코드를 윈도우 2000에서 실행시켜보면 됩니다.

procedure TForm1.Button2Click(Sender: TObject);
var
  v,v2: OleVariant;
  i: Int64;
begin
  I := 123456789012345;
  v := i;
  v2 := 'Y';
  v := v2; // <- _VarCopy를 호출하는 중에 에러가 발생합니다. 이 함수는 OLEAUTO32.DLL의 VariantCopy 함수를 호출합니다.
end;

RTL에는 이 문제를 어느 정도 피해갈 수 있도록 해주는 장치가 준비되어 있습니다.

Variants.pas 소스 파일에 다음과 같은 부분이 있습니다.

// If TRUE Int64 values are converted to varDouble for compatibility with
// Windows 9x/2000 platforms which don't support varInt64 in OleVariant.
OleVariantInt64AsDouble: Boolean = False;

(true로 설정되면 OleVariant에서 varInt64를 지원하지 않는 윈도우 9x/2000 플랫폼에서의 호환성을 위해 Int64 값이 varDouble로 변환된다)

다음의 유닛은 윈도우 2000일 경우 위의 변수 값을 설정하여 에러를 피할 수 있게 해줍니다.

unit VariantOSSetup;

interface

implementation

uses
  Sysutils, Variants;

function CheckWin32VersionBelow(AMajor: Integer; AMinor: Integer = 0): Boolean;
begin
  Result := (Win32MajorVersion < AMajor) or ((Win32MajorVersion = AMajor) and
            (Win32MinorVersion <= AMinor));
end;

initialization
  OleVariantInt64AsDouble := CheckWin32VersionBelow(5);

end.

이 유닛이 적용될 경우 유효 숫자를 잃게 된다는 점도 기억해두십시오.

박지훈.임프 [cbuilder]   2008-03-04 16:17 X
코드기어 Support에 번역해서 올렸던 것입니다.
http://support.codegear.com/article/36352

+ -

관련 글 리스트
30 윈도우 9x/2000에서 variant에 Int64 값을 사용하면 에러 발생 박지훈.임프 5306 2008-03-04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.