델파이® 2007 for Win32® 및 C++빌더® 2007 릴리즈 노트

By: Jeehoon Imp Park /Korea

Abstract: 제품의 문서에 포함되어 있지 않을 중요한 보충 정보들을 포함하고 있습니다.

    델파이® 2007 for Win32® 및 C++빌더® 2007 릴리즈 노트

이 파일은 제품의 문서에 포함되어 있지 않을 중요한 보충 정보들을 포함하고 있습니다. 코드기어는 여러분이 이 파일을 완전히 읽어볼 것을 권합니다.

이 문서에서 "제품"이라고 지칭한 경우 델파이 2007 for Win32와 C++빌더 2007 양쪽 모두에 적용되는 정보입니다.

설치, 배포, 라이선스에 대한 정보를 찾아보려면 Install, Deploy, License 문서를 참고하십시오. 기본적으로 이 파일들은 C:\Program Files\CodeGear\RAD Studio\5.0 위치에 있습니다.

    목차

    제품의 설치, 언인스톨, 업그레이드

  • 제품을 설치, 언인스톨, 업그레이드하기 전에 설치 및 라이선스 관련 이슈들에 대한 자세한 정보를 위해 먼저 INSTALL 파일과 LICENSE 파일을 살펴보십시오. 이 두 파일들은 기본적으로 다음의 위치에 있습니다.

    C:\Program Files\CodeGear\RAD Studio\5.0\install.htm C:\Program Files\CodeGear\RAD Studio\5.0\license.rtf

    예를 들어, install.htm 파일은 C++빌더의 설치를 위해 필요한 디스크 공간 요구사항에 대해 설명합니다.

  • 제품을 잘못된 순서로 설치하면 문제가 발생할 수 있으며 피해야 합니다. 예를 들면,

    • C++빌더 2007을 설치한 후에 볼랜드 디벨로퍼 스튜디오 2006을 설치하지 마십시오. 이런 순서로 설치를 시도하면 BDS 2006을 실행할 수 없게 될 것입니다. 등록을 마친 후에 다음과 같은 에러가 발생하게 됩니다.

      Exception EPackageRegistrationException in module coreide100.bpl at 000DB245. Registration procedure, Cppproject.IDERegister in package C:\Program Files\Borland\BDS\4.0\Bin\bcbide100.bpl raised exception class EOleSysError: OLE error 80131040, ClassID: {F8FEDD39-E3CE-4B8D-A657-9CA24686881F}

      이 문제는 BDS 2006 설치에서 어셈블리가 잘못 등록되었기 때문에 발생합니다. 시스템에 .NET 2.0과 .NET 1.1이 동시에 설치되어 있으면 시스템은 load borland.studio.toolsets.dll을 로드하지 못합니다. 이 문제에 대한 회피 방법은 어셈블리 로더가 이 어셈블리에 대해 .NET 1.1을 사용하도록 강제하는 것입니다. 더 자세한 정보를 알아보려면 다음의 링크들을 참고하십시오.

      http://qc.codegear.com/wc/qcmain.aspx?d=28728

      http://qc.borland.com/wc/qcmain.aspx?d=22108

      http://support.codegear.com/article/36047

    • C++빌더 2007을 설치한 후 최초에 발표되었던 델파이 2007 for Win32 버전을 설치하지 마십시오. 이런 시도를 하면 두 제품이 모두 설치되지 않습니다. 그 대신 다음과 같은 절차대로 델파이 2007 for Win32 Update 1을 설치하십시오. 시작 메뉴 | 프로그램 | RAD Studio | Modify, Repair, Uninstall을 클릭하고 Upgrade를 선택한 후, 인스톨러에서 델파이 시리얼 번호를 입력하여 설치합니다.

    • C++빌더 2007과 델파이 2007 for Win32 업데이트 1을 모두 설치하려는 경우 그 전에 델파이 2007 for Win32을 언인스톨하지 마십시오. 이런 경우 델파이는 사용 가능하고 C++빌더는 사용할 수 없게 됩니다. 이런 상황을 피하려면, HKEY_CURRENT_USER\Software\Borland\BDS\5.0 레지스트리 키를 삭제하면 됩니다.
  • 제품을 설치하기 위한 여유 공간이 충분하지 않은 경우에도 인스톨러는 경고를 하지 않습니다. C++빌더를 설치하려면 C: 드라이브에 약 2GB의 여유 공간이 필요합니다. (다른 드라이브에 설치하려는 경우에도 마찬가지입니다.) If there is insufficient space, the installer might hang.

  • 델파이 2007을 언인스톨한 후에 일부 시스템 파일/설정들이 제거되며, 리부팅하기 전까지는 .NET 2.0을 언인스톨하거나 구성 변경을 해서는 안됩니다.
  • IDE에는 한가지 종류의 마이크로소프트® 오피스 컨트롤들만을 설치할 수 있습니다. 델파이 Win32용 오피스XP, C++빌더용 오피스XP, 델파이 Win32용 오피스2000, C++빌더용 오피스2000 중에서 선택할 수 있습니다. 이들 컨트롤들을 다시 설치하려면 Component>Install packages를 선택하십시오.

Top

    기본 정보

  • 두 제품의 데모는 제품을 설치한 방법과 윈도우 비스타인가 여부에 따라 다른 디렉토리에 설치됩니다.
    • 설치 과정에서 All Users를 선택한 경우, 데모는 C:\Documents and Settings\All Users\Shared Documents\RAD Studio\5.0\Demos 디렉토리에 설치됩니다.
    • 설치 과정에서 Just Me를 선택한 경우, 데모는 C:\Documents and Settings\My Documents\RAD Studio\5.0\Demos 디렉토리에 설치됩니다.
    • 윈도우 비스타에서 설치 과정에서 All Users를 선택한 경우, 데모는 C:\Users\Public\Documents\RAD Studio\5.0\Demos 디렉토리에 설치됩니다.
    • 윈도우 비스타에서 설치 과정에서 Just Me를 선택한 경우, 데모는 C:Users\username\Documents\RAD Studio\5.0\Demos 디렉토리에 설치됩니다.
  • 제품에는 Indy10이 통합되어 있지만, 이전 버전인 Indy9도 설치할 수 있습니다. Indy9은 C:\Program Files\CodeGear\RAD Studio\5.0\source\Win32\Indy9 디렉토리에 있습니다.
  • WebAppDebugger 애플리케이션을 패키지와 빌드하려면, 런타임 패키지 리스트에서 Indy9 패키지가 Indy10보다 위치하게 해야 합니다.

    Component>Install Packages 메뉴를 선택합니다.

    다음과 같이 "indy;"를 런타임 패키지 리스트의 가장 앞에 추가합니다.

    indy;vcl;rtl;bcbie;vclx;vclactnband;xmlrtl;bcbsmp;dbrtl;vcldb;bdertl;vcldbx;dsnap;dsnapcon;teeUI;tee;teedb;vclib;ibxpress;adortl;dbxcds;dbexpress;DbxCommonDriver;IndyCore;IndySystem;IndyProtocols;inet;IntrawebDB_90_100;Intraweb_90_100;VclSmp;vclie;websnap;webdsnap;inetdbbde;inetdbxpress;soaprtl

    이것은 두 제품 모두에 해당됩니다.

  • 웹 애플리케이션을 디버그하려면 먼저 serverinfo.exe를 실행해야 하며, 자동으로 자신을 등록합니다. 이 과정은 웹 애플리케이션 디버거(WebAppDbg.exe, 설치 디렉토리의 \bin 폴더에 있음)를 사용하기 위해 필요합니다.
  • VCL for the Web 컴포넌트의 헬프 등 IntraWeb에 대한 정보를 찾아보려면, http://www.atozed.com/intraweb/docs/를 참고하십시오.
  • .NET 프레임워크와 .NET SDK가 영어와 일본어처럼 다른 언어로 나타나게 할 수 있습니다. It is possible for .NET Framework and .NET SDK to appear in different languages, such as English and Japanese. .NET 프레임워크는 모든 가능한 언어를 설치하며 시스템 로케일에 따라 어떤 언어를 사용할지 결정됩니다. 반면 .NET SDK는 설치 중에 선택한 언어만 설치됩니다.
  • COM 서버를 등록하려면, 처음 한번은 /regserver 파라미터와 함께 실행시켜야 합니다. 다음의 과정을 따르십시오.
    1. 새 프로젝트를 생성합니다.
    2. 프로젝트를 저장합니다.
    3. Run | Parameters 메뉴에서 /regserver 파라미터를 지정합니다.
    4. 프로젝트를 실행합니다. 애플리케이션이 등록되고 종료됩니다.
    5. Run | Parameters에서 /regserver 파라미터를 지웁니다.
  • 여러분이 VCL 컴포넌트 제작자이고 여러분의 컴포넌트 인스톨러가 레지스트리의 패스에 여러분의 컴포넌트 패스를 추가하도록 수정하는 경우, 여러분의 인스톨러에서는 다음의 레지스트리 키를 추가로 수정해야 합니다.

    HKEY_LOCAL_MACHINE\Software\Borland\BDS\5.0\Globals

    ForceEnvOptionsUpdate라는 이름의 문자열 값을 추가(이미 존재할 경우 수정)하고 "1." 값으로 설정합니다. 이 레지스트리 키가 "1," 값으로 설정되면, 다음 번에 IDE가 실행될 때 디스크의 EnvOptions.proj 파일을 수정하여 여러분의 인스톨러가 추가한 패스를 포함시킵니다. EnvOptions.proj 파일에 패스가 추가되면 IDE의 MSBuild 빌드 엔진이 IDE의 Tools>Options 다이얼로그에 있는 Library - Win32 페이지에 나열된 패스를 포함하게 됩니다.

    여러분의 인스톨러가 다음의 레지스트리 키들 중 하나를 수정하게 되면, Globals\ForceEnvOptionsUpdate 키도 수정(혹은 추가)해야 합니다.

    • Software\Borland\BDS\5.0\Library\Browsing Path
    • Software\Borland\BDS\5.0\Library\Debug DCU Path
    • Software\Borland\BDS\5.0\Library\Namespace Search Path
    • Software\Borland\BDS\5.0\Library\Package DCP Output
    • Software\Borland\BDS\5.0\Library\Package DPL Output
    • Software\Borland\BDS\5.0\Library\Search Path
  • RAD Studio는 WinHelp 뷰어(WinHelp.exe)를 자동으로 등록하지 않습니다. 애플리케이션에서 .HLP 파일을 사용할 수 있도록 하려면 애플리케이션에 포함된 유닛들 중 하나의 uses 리스트에 WinHelp 뷰어를 추가해야 합니다.

    WinHelp 뷰어를 다운로드하려면, 마이크로소프트 웹사이트를 방문하십시오.
    http://www.microsoft.com/downloads/details.aspx?familyid=6ebcfad9-d3f5-4365-8070-334cd175d4bb

Top

    알려진 문제점들

    DLL을 동적으로 로드할 경우 RTL을 동적으로 링크하면 안됨

동적으로 DLL을 로드하는 경우, 런타임 라이브러리에 동적으로 링크해서는 안됩니다. 그렇지 않으면 프로그램이 종료될 때 Access Violation이 발생합니다. 이 문제를 피하려면 프로젝트 옵션의 Linker\Linking 페이지에서 Linking 섹션의 Dynamic RTL 체크박스의 체크 표시를 빼야 합니다.

    GdiPlus 라이브러리 사용시 NO_STRICT #define를 꺼야 함

C++ 라이브러리 GdiPlus는 STRICT가 아닌 모드에서는 사용되어서는 안됩니다. Graphics::Graphics(HDC)와 Graphics::Graphics(HWND)가 구별되어야 하는데, STRICT가 아닌 모드에서는 HWND와 HDC 모두 "void*"입니다. STRICT가 아닌 모드에서 GdiPlus를 사용할 경우 에러가 발생합니다.
[C++ Error] GdiplusGraphics.h(37): E2015 Ambiguity between 'Gdiplus::Graphics::Graphics(void *)' and 'Gdiplus::Graphics::Graphics(void *,int)'

    ActiveX

C++ 빌더 6에서 생성된 ActiveX 라이브러리 프로젝트를 C++빌더 2007에서 오픈할 경우 Register와 Unregister 메뉴 항목이 활성화되지 않습니다. 이 문제를 피하려면 Run>Parameters를 선택하고 Host application을 "C:\windows\system32\regsvr32.exe"으로, 그리고 Parameters를 <ProjectName>로 설정해야 합니다.

Top

    C++빌더 및 C++ 컴파일러 관련

    이전 버전의 C++ 컴파일러와 바이너리 호환이 안됨

C++ 런타임 라이브러리는 강화되고 수정되었으며, Dinkumware의 표준 C++ 라이브러리도 5.01로 업데이트되었습니다. 이런 변경 때문에 C++빌더 2007에서 생성된 바이너리 객체는 이전 버전에서 컴파일된 버전과 다를 수 있습니다. 이런 비호환성은 거의 C++ 표준 라이브러리 때문이며, 기본적인 C++ 애플리케이션 바이너리 인터페이스(ABI)에는 변경된 사항이 없습니다.

    디폴트 값으로 nil을 갖는 델파이 인터페이스 파라미터의 처리가 변경됨
델파이 인터페이스에 void * 타입을 대입하면 컴파일이 되지 않음

인터페이스 파라미터가 디폴트 값으로 nil를 가질 경우, 이전에는 델파이 컴파일러(DCC32)가 .hpp 파일에 다음과 같이 코드를 생성했습니다.

  void methodName(_di_IIntf param = (void *)(0x0));

이전에는 C++ 컴파일러가 이 문법을 잘못 받아들였습니다.

이번 버전에서는, 델파이 컴파일러와 C++ 컴파일러 모두 이런 경우를 이전과는 다르게 처리합니다.

델파이 컴파일러는 nil 디폴트 값을 가진 인터페이스 파라미터에 대해 .hpp 파일에 다음과 같이 코드를 생성합니다.

  void methodName(_di_IIntf param = _di_IIntf());

C++ 컴파일러는 "void *" 타입을 델파이 인터페이스로 대입하는 코드에 대해 에러를 냅니다. 예를 들어, 다음과 같은 라인은

  void methodName(_di_IIntf param = (void *)(0x0));

다음과 같은 에러를 내며 컴파일에 실패합니다.

  Cannot convert 'void *' to '_di_IIntf'

여러분의 기존 델파이 코드가 nil 디폴트 값을 갖는 인터페이스 파라미터를 포함하고 있는 경우 DCC32로 재컴파일하십시오. 소스가 없다면 .hpp 파일을 열어서 다음과 같은 라인을

  void methodName(_di_IIntf param = (void *)(0x0));

모두 다음과 같이 수정하십시오.

  void methodName(_di_IIntf param = _di_IIntf());

    델파이 코드의 Symbol Reference Info 옵션을 모두 선택하기

C++빌더 프로젝트에서 델파이 코드를 컴파일하는 경우, Project>Options>Delphi Compiler>Compiling 다이얼로그에서 Symbol Reference Info 옵션들(Definitions와 Reference Info) 중 하나만 선택할 수 있습니다. 하지만, 다음과 같이 소스에서 디렉티브($xx)를 사용할 경우 두가지 옵션을 모두 선택할 수 있습니다.

  • Definition Info ($YD) 옵션: 델파이 컴파일러는 각 식별자가 선언된 위치 정보를 기록합니다. 변수, 상수, 클래스 등 대부분의 식별자에 대해 컴파일러는 선언된 위치를 기록합니다. 프로시저, 함수, 메소드에 대해 컴파일러는 구현(implementation)의 위치를 기록합니다. 이 옵션을 사용하면 코드 에디터 브라우징이 가능합니다.
  • Reference Info ($Y+) 옵션: 델파이 컴파일러는 각 식별자가 선언된 위치와 함께 사용된 위치 정보도 기록합니다. 이 옵션을 사용하면 프로젝트 브라우저의 References 페이지가 활성화됩니다.
이 컴파일러 옵션들은 Debugging Information($D) 옵션과 Local debug symbols($L) 옵션이 모두 ON일 때만 사용 가능합니다.

    WebSnap 디렉토리 지정

C++빌더에서 WebSnap을 사용할 경우, 실행 파일이 HTML 파일들과 같은 디렉토리에 생성되도록 해야 합니다. Project>Options>Paths and Defaults>Final Output에 마침표(".")를 입력하면 실행 파일이 프로젝트 디렉토리에 생성됩니다.

    프리컴파일드 헤더 위치 변경

C++ 프리컴파일드 헤더 파일(PCH)은 BDS2006에서와는 다른 위치에 생성됩니다. 따라서 BDS2006에서 프로젝트를 임포트하면 프로젝트의 PCH 파일 위치를 함께 임포트하지 않습니다. Project>Options>Precompiled headers>PCH filename에서 PCH 파일 위치를 지정할 수 있습니다.

    델파이 컴파일러로 C++ 파일 생성

.pas 파일에서 .hpp 파일과 .obj 파일을 생성하려 할 경우 dcc32.exe를 -JPHNE 스위치와 함께 실행해야 합니다. 혹은 .pas 파일을 포함하는 .dpk 파일에서 -JL 스위치를 사용하십시오.

    C++ 컴파일러 변경

C++ ANSI 표준의 규칙을 더 잘 준수하기 위해, C++빌더 2007에 포함된 C++ 컴파일러는 이전 버전보다 더 엄격하게 변경되었습니다. 따라서 C++빌더 이전 버전에서 에러가 발생하지 않던 코드가 C++빌더 2007에서 컴파일이 되지 않을 수 있습니다. 이 섹션은 컴파일러가 더 엄격해진 영역들 몇가지를 보여줍니다. 각 케이스는 문제를 보여주는 예제와 함께 C++빌더 2007에서 그 문제를 해결하기 위해 어떻게 코드를 수정해야 할지를 보여줍니다. 문제가 되는 코드를 수정하는 방법에는 다른 여러 방법들이 있을 수 있습니다. 적절한 방법은 원래 코드의 목적에 따라 달라집니다.

  1. 레퍼런스와 퀄리파이어의 바인딩

    C++빌더 2007에 포함된 C++ 컴파일러가 비슷비슷한 에러를 발생시키는 여러 경우가 있습니다. 다음과 같이 분류됩니다.

    1. const가 아닌 lvalue를 non-const 레퍼런스에 바인딩. 이것을 허용하려면 -Vbr 컴파일러 스위치를 사용하십시오.
    2. a temporary를 non-const 레퍼런스에 바인딩. 이것을 허용하려면 -Vbr 컴파일러 스위치를 사용하십시오.
    3. const나 volatile 객체를 각각 non-const나 non-volatile 메소드에 바인딩. 이것을 허용하려면 -Vbn 컴파일러 스위치를 사용하십시오.

    볼랜드 C++ 컴파일러의 이전 버전들에서는 const가 아닌 레퍼런스 파라미터에 대한 바인딩의 다양한 형태로 허용했습니다. 예를 들면 다음의 예제에서 psize 파라미터를 간단히 캐스팅할 수 있었습니다.

      int takesLongRef(long& l);
      int takesUnsignedPtr(unsigned long* psize) {
         return takesLongRef((long)*psize);
      }

    C++빌더 2007에서는, 위의 코드는 다음과 같은 에러를 발생시킵니다.

      Error E2357 test.cpp 3: Reference initialized with 'long', needs lvalue of type 'long' in function takesUnsignedPtr(unsigned long *)
      Error E2342 test.cpp 3: Type mismatch in parameter 'l' (wanted 'long &', got 'long') in function takesUnsignedPtr(unsigned long *)

    이 에러를 없애려면 다음과 같이 역참조하기 전에 psize를 캐스트하면 됩니다.

      int takesLongRef(long& l);
      int takesUnsignedPtr(unsigned long* psize) {
        return takesLongRef(*reinterpret_cast<long*>(psize));
      }

    암시적으로 임시 변수가 사용되는 경우들을 주의하십시오. 예를 들어, 일부 이진 연산자들은 내부적으로 임시 변수를 사용합니다.

      enum { zero, one, two } num;
      num |= two; // 허용되지 않음
      num = num | two; // 문제 없음

    암시적으로 임시 변수가 사용되는 다른 경우는 프로퍼티 값을 리턴 값으로 전달하는 경우입니다. 다음 예제는 이전 버전의 컴파일러에서는 잘 컴파일되었습니다.

      #include <vcl.h>
      class TTest {
        WideString FData ;
      public:
        __property WideString Data = {read = FData };
      };

      void Func(WideString& wref);

      void test() {
        TTest t;
        Func(t.Data);
      }

    C++빌더 2007에서는, 위의 코드는 두 개의 에러를 발생시킵니다.

      Error E2357 test.cpp 14: Reference initialized with 'const WideString', needs lvalue of type 'WideString' in function test()
      Error E2342 test.cpp 14: Type mismatch in parameter 'wref' (wanted 'WideString &', got 'WideString') in function test()

    이 문제는 다음과 같이 const 참조에 대한 참조를 변경함으로써 수정할 수 있습니다.

      void Func(const WideString& wref);

    컴파일러가 이런 상황을 허용하도록 강제하려면 -Vbn-Vbr 스위치를 사용하면 됩니다. 하지만, 코드기어는 여러분의 목적과 역행하는 코드의 생성을 피할 수 있도록 표준을 준수하도록 코드를 수정할 것을 권합니다.

  2. 1.1 Reconcile Error Dialog

    이전 버전 오브젝트 리포지토리에서 Reconcile Error Dialog 위저드에 의해 생성된 코드에서 위에서 언급한 임시 변수와 참조의 문제가 발생합니다. 이 문제를 해결하려면, VarToAnsiStr 메소드를 찾아서,

      AnsiString VarToAnsiStr (Variant &V, TFieldType DataType)

    다음과 같이 const Variant& 타입 인자를 받도록 수정하십시오.

      AnsiString VarToAnsiStr (const Variant &V, TFieldType DataType)

  3. 문자열 표기가 상수로 인식됨

    이제 문자열 표기는 기본적으로 'const char[]' 타입으로 간주됩니다. 이것도 이전 버전에서는 컴파일되었던 코드에서 에러를 발생시킵니다.

    스트링 표기를 const가 아닌 것으로 되돌리려면 -Vbs 스위치를 사용하면 됩니다. 하지만, 코드기어는 코드를 수정해서 해결하기를 권합니다.

    스트링 표기의 타입 변경으로 인해 또한 컴파일러가 오버로드된 메소드에 대한 호출을 해석하는 방법도 바뀌었습니다. 이에 대해 다음의 예제에서 보여줍니다.

      void foo(char *);
      void foo(const char *);
      foo("string"); // 새 컴파일러에서는 foo(const char *)를 호출함

  4. 템플릿 변경

    C++ 컴파일러는 더 이상 'template <>' 표시가 없는 명시적인 템플릿을 허용하지 않습니다. 허용하려면 -Vbe 컴파일러 스위치를 사용하십시오. 다음의 예제는 이 문제를 보여줍니다.

      template<class>
      class foo {
        foo();
      };
      foo<int>::foo(); // 에러
      template<> foo<int>::foo(); // OK

    또한, C++ 컴파일러는 클래스 안에서 명시적으로 템플릿을 특정(specialize)하는 것을 허용하지 않게 되었습니다. 허용하려면 -Vbx 컴파일러 스위치를 사용하십시오. 예를 들어 다음의 코드는 에러가 발생합니다.

      struct S {};
      struct SP
      {
        template <typename T> void foo(const T &) {}
        template <> void foo(const S &) {} // Error
      };

  5. 함수 오버로드 해석

    C++빌더 2007 컴파일러가 이전 버전과 가장 많이 달라진 부분들 중 하나는 오버로드 해석인데, 여기에는 모호함(ambiguity) 탐지도 포함됩니다. 이전 버전에서는 허용되었던 몇몇 경우가 모호하거나 해당하는 것이 없다고 인식될 수 있으며, 그 목적을 명확히 하도록 코드를 수정해야 합니다.

    이전 방식대로 되돌리는 컴파일러 옵션은 -Vbo입니다.

    다음의 에제는 이런 새로운 동작 방식을 보여줍니다.

      class X{};
      void foo(X);
      void foo(const X&);
      void ambig() {
        X x;
        foo(x); //error
      }

  6. 4.1 std::abs() 함수에서 모호함 문제

    표준 abs 함수도 abs 함수의 여러 오버로드된 버전에서 요구되는 타입들과 정확히 일치하지 않는 파라미터를 가지는 경우 모호함 메시지를 발생시킬 수 있습니다. 아래에 그 예를 보여줍니다.

      #include <limits>
      bool test(long l) {
        return std::abs(l) > 0;
      }

    위의 코드는 다음과 같이 에러 하나와 경고 하나를 발생시킵니다.

      Error E2015 test.cpp 5: Ambiguity between 'std::abs(int) at C:\dev\tp\sc\include\math.h:208' and 'std::abs(long double) at C:\dev\tp\sc\include\math.h:275' in function test(long)
      Warning W8057 test.cpp 6: Parameter 'l' is never used in function test(long)

    이 문제를 해결하려면, 호출되어야 할 오버로드 함수의 타입으로 캐스팅을 해주면 됩니다. 예를 들면 다음과 같습니다.

      #include <limits>
      bool test(long l) {
        return std::abs(static_cast<int>(l)) > 0;
      }

  7. 초기화 및 변환

    컴파일러는 이제 초기화(initialization) 및 변환(conversion) 관련 2003 C++ ANSI 표준 8.5.1 항과 13.3.1 항을 준수합니다.

    1. 직접 초기화(direct initialization)는 이제 생성자에서의 초기화를 필요로 하며 사용자 변환 과정(user conversion sequence)을 거치지 않습니다.
    2. 동일하거나 상속받은 타입의 객체에 대한 복사 초기화(copy initialization)는 이제 생성자 호출을 필요로 합니다.
    3. 다른 타입의 객체에 대한 복사 초기화는 더 이상 생성 과정보다 사용자 변환(user conversion)을 우선하지 않습니다. 컴파일러가 적합한 사용자 변환을 발견하면, 변환 생성자(converting constructor)를 계속 찾습니다. 선택된 변환 함수가 변환 생성자일 경우, 해당 호출은 대상 타입의 임시 변수를 초기화합니다. 호출의 결과(생성자의 경우에는 임시 변수)는 그 객체를 직접 초기화하기 위해 사용됩니다. 이와 관련하여 이전 버전과 같이 동작하도록 하려면 -Vbo 컴파일러 스위치를 사용하십시오.
    4. 캐스트

      명시적인 캐스트의 경우, 컴파일러는 이제 임시 변수에 직접 초기화를 수행합니다. 아래 예제를 참고하십시오.

        // 이 예제에서, dst는 대상 타입이며 src는 원본 타입입니다.
        class A { };
        class V {
        public:
          V() { };
          V( const V & ) { }
          V( const A & ) { }
        };
        class G {
        public:
          G() { }
          operator V() { }
          operator A() { }
        };
        G g; V v;
        // 직접 초기화
        // ==> 생성자 호출.
        V v9(g);
        // 5.82에서는 두 문장 모두 컴파일되었으나, 이제는 에러가 발생함
        // Error E2015: Ambiguity between 'V::V(const V &)' and 'V::V(const A &)'
        // 캐스트
        // (V)g는 V tmp(g)로 취급되며, 이것은 'tmp'의 직접 초기화임
        // ==> 생성자 호출.
        (V)g;
        static_cast<V>(g);
        // 5.82에서는 두 문장 모두 컴파일되었으나, 이제는 에러가 발생함
        // Error E2015: Ambiguity between 'V::V(const V &)' and 'V::V(const A &)'
        // 복사 초기화 : dst=V src=G
        // ==> 사용자 정의 변환 호출.
        V v4 = g;
        V v5 = G();
        // 5.82에서는 두 문장 모두 컴파일되었으나, 이제는 에러가 발생함
        // Error E2015: Ambiguity between 'V::V(const A &)' and 'V::V(const V &)'
        // 복사 초기화 : dst=V src=V
        // ==> V의 변환 생성자 호출.
        V v6 = (V)g;
        V v7 = V(g);
        // 5.82에서는 두 문장 모두 컴파일되었으나, 이제는 에러가 발생함
        // Error E2015: Ambiguity between 'V::V(const V &)' and 'V::V(const A &)'

  8. 5.1 사용자 정의 연산자를 통한 변환

    새 C++빌더 2007 컴파일러는 종종 사용자 정의 연산자가 호출되는 변환에 대해 모호함 메시지를 냅니다. 다음은 그 예입니다.

      class AnsiString
      {
      public:
        bool operator ==(const AnsiString& other);
        AnsiString(const wchar_t* src);
      };

      class Variant
      {
      public:
        operator AnsiString() const;
        operator wchar_t*() const;
        bool operator ==(const AnsiString& rhs) const
        { return static_cast<AnsiString>(*this) == rhs;}
      };

    C++빌더 사용자들중 상당수는 위 코드가 VCL의 AnsiStringVariant 클래스의 일부분이라는 것을 알 것입니다. 이전 버전의 컴파일러는 'static_cast<AnsiString>(*this)'에 대해 'Variant' 'operator AnsiString() const'를 호출했습니다. 하지만 C++빌더 2007은 '생성자를 통한 변환'을 사용합니다. Variant는 AnsiString 생성자에 대해 여러 타입으로 변환될 수 있기 때문에 컴파일러는 모호함 에러를 냅니다.

    이 문제를 해결하려면, 다음과 같이 캐스트를 제거해야 합니다.

      bool operator ==(const AnsiString& rhs) const
      { return (*this) == rhs;}

    다음과 같이 명시적으로 처리할 수도 있습니다.

      bool operator ==(const AnsiString& rhs) const
      { return this->operator AnsiString() == rhs; }

    5.2 Variant/OleVariant/AnsiString/WideString/TDateTime

    위에서 설명한 사용자 정의 변환 연산자와 생성자를 통한 변환의 문제는 Variant, OleVariant, AnsiString, WideString, TDateTime, Currency 등 VCL의 여러 클래스 생성자들에서 The issue described above with a user-defined conversion operator vs. conversion via constructor might be encountered in several constructs involving the VCL classes Variant, OleVariant, AnsiString, WideString, TDateTime, Currency, and so forth. 다음의 표는 에러 메시지를 발생시키는 코드와 수정된 문법을 리스트합니다.

    이전 코드 수정된 코드 설명
    AnsiString test(OleVariant v) {
      AnsiString ret = (AnsiString) v;
      return ret;
    }
    AnsiString test(OleVariant v) {
      AnsiString ret = /*(AnsiString)*/ v;
      return ret;
    }
    대입문에서 변환 연산자에 의존할 경우 캐스트할 수 없습니다.
    WideString test(OleVariant v) {
      WideString w(v);
      return w;
    }
    WideString test(OleVariant v) {
      WideString w = v;
      return w;
    }
    직접 생성자 대신 복사 초기화를 사용합니다.

    위에서 설명한 에러들을 위한 컴파일러 변경은 컴파일러가 초기화 및 변환을 처리하는 방식과 관계되어 있습니다.

Top

    윈도우 비스타TM 관련 사항

  • 윈도우 비스타에서는, 관리자 권한을 가진 계정으로 로그인하여 인스톨러를 실행해야 합니다. 이것은 Program Files 디렉토리에서 더 높은 보안을 요구하도록 변경되었기 때문입니다.
  • 윈도우 비스타에서 등록 클라이언트(registration client)가 간혹 실패할 수 있습니다. 이 문제를 피하려면, 윈도우 비스타 OneCare 방화벽이 나타날 때 Allow this program을 선택하고 종료한 후 등록을 다시 시작합니다. 만약 Block this program을 선택하면 이후에도 다시 등록을 할 수 없게 됩니다.
  • 윈도우 비스타는 더 이상 이전의 WinHelp 헬프 뷰어(WinHelp.exe)를 지원하지 않습니다. .HLP 파일을 사용하려면 애플리케이션에 포함된 유닛들 중 하나의 uses 리스트에 WinHelp 뷰어를 추가해야 합니다. WinHelp 뷰어를 다운로드하려면 마이크로소프트 웹사이트를 방문하십시오. http://www.microsoft.com/downloads/details.aspx?familyid=6ebcfad9-d3f5-4365-8070-334cd175d4bb 기본 정보에서 관련 항목을 참고하십시오.
  • 비스타에서 TAnimation를 사용하려면 Win32 탭에 있는 TShellResource 컴포넌트를 프로젝트에 추가해야 합니다. TShellResource를 추가하면 다음의 리소스들이 추가됩니다.
    • FindFolder.res
    • FindFile.res
    • FindComputer.res
    • CopyFiles.res
    • CopyFile.res
    • RecycleFile.res
    • EmptyRecycle.res
    • DeleteFile.res
  • 윈도우 비스타에서 BDE를 사용하려면, BDE가 C:\<root> 디렉토리에 있는 파일을 쓰려고(write) 시도하지 않도록 재설정해야 합니다. 이렇게 하려면 관리자로 로그온하여 Program Files\Common Files\Borland Shared\BDE 디렉토리에 있는 BDEAdmin.exe를 실행합니다. Native 아래에서 PARADOX를 클릭하고, NET DIR를 루트 디렉토리 이외의 위치를 가리키도록 수정합니다. C:\Users\Public\Documents\RAD STUDIO 위치로 지정하는 것도 좋은 방법입니다.
  • 윈도우 XP 서비스 팩 2(SP2)에서 .exe 파일이나 .dll 파일에 대한 윈도우 비스타 확장을 가진 manifest를 추가하면 컴퓨터가 리부팅될 수 있습니다. 이 문제에 대한 정보와 핫픽스를 위해서는 http://support.microsoft.com/kb/921337를 참고하십시오.
  • 비스타 시스템에서 common 다이얼로그 컴포넌트를 포함하는 기존의 VCL 애플리케이션을 리빌드하고 실행시키면, 기존의 open, save, message 다이얼로그 대신 비스타의 태스크 다이얼로그가 사용됩니다. 이런 결과를 원치 않는다면, 원래의 동작을 강제하기 위해 프로그램의 시작 부분에서 UseLatestCommonDialogs 전역 변수를 false로 설정하십시오.
  • VCL for the Web(IntraWeb) 애플리케이션을 실행하고 디버그하려면 윈도우 2003이나 윈도우 XP를 사용해야 합니다. 윈도우 비스타를 사용한다면, VCL for the Web을 디버그할 때는 UAC(User Access Control)를 꺼야 합니다. VCL for the Web 헬프 등 IntraWeb에 대한 더 많은 정보가 필요하면 http://www.atozed.com/intraweb/docs/를 참고하십시오.
  • 비스타에서 UAC가 활성화되어 있으면 실행 파일의 이름이 "setup", "update", "install"을 포함하고 있을 경우 ide가 시스템 관리자 계정으로 실행되어 있지 않은 경우에는 프로그램을 디버그할 수 없습니다. IDE 바깥에서 이런 문자열을 포함한 실행 파일을 실행하려고 시도하면 시스템 관리자 계정 패스워드를 묻는 다이얼로그가 나타납니다. IDE 안에서 디버깅 없이 실행시키면 프로그램이 권한 상승이 필요하다는 에러를 냅니다. IDE 안에서 디버깅 모드로 실행시키면 프로세스 생성 에러가 발생합니다. 더 자세한 정보를 위해서는 http://blogs.msdn.com/uac/archive/2006/01/13/512776.aspx 페이지를 참고하십시오.

Top

    컴맨드라인 관련

  • 이제 컴맨드라인에서 MSBuild 실행파일을 이용하여 프로젝트를 빌드할 수 있습니다. 시작 메뉴>프로그램>CodeGear RAD Studio>RAD Studio Command Prompt을 선택하면 자동으로 MSBuild 실행파일에 대한 패스와 환경 변수가 모두 설정됩니다. MSBuild의 사용에 대한 더 자세한 정보를 위해서는 온라인 헬프에서 MSBuild를 찾아보십시오.

Top

    데이터베이스 관련

    델파이 2007 for Win32에서 dbExpress의 업그레이드

델파이 2007 for Win32에서 dbExpress를 사용하다가 업데이트한 경우 소스 코드를 수정할 필요는 없습니다. 하지만 SQLExpr이나 DbxCommon 유닛을 uses하는 모든 코드를 재컴파일해야 합니다. 이 두 유닛은 델파이 2007 for Win32의 첫 출시 이후로 변경되었습니다.

    알려진 문제점들

  • 새로운 MySQL dbExpress 드라이버인 dbxmys30.dll은 5.0.xx 서버 설치의 LibMySQL.dll과 테스트되었습니다. MySQL 4.0.xx와 dbExpress를 사용하려면 LibMySQL.dll을 5.0.xx 버전으로 업그레이드하거나 dbExpress의 dbxmysA30.dll를 사용하십시오. LibMySQL.dll의 이전 버전을 현재 버전의 MySQL dbExpress 드라이버와 사용하는 것은 예상치 못한 결과를 일으킬 수 있습니다.

  • LibMySQL.dll (4.x 버전)을 사용하여 데이터 익스플로러의 테이블 노드를 확장하려고 시도하면 에러 메시지가 나타날 수 있습니다.

    "Attempted to read or write protected memory."
    이 문제를 피하려면 LibMySQL.dll을 a 5.0.xx 버전으로 업그레이드하십시오.
  • 다음의 조합들이 테스트되었습니다.

    LibMySQL.dll (4.0.XX)DBXMysA30.dllMySQL 4.0.XX 서버
    LibMySQL.dll (5.0.XX)DBXMys30.dllMySQL 4.0.XX 서버
    LibMySQL.dll (5.0.XX)DBXMys30.dllMySQL 4.1.XX 서버
    LibMySQL.dll (5.0.XX)DBXMys30.dllMySQL 5.0.XX 서버
  • DBXMysA30 드라이버를 사용하려 하는 경우 DBXMys30.dll을 DBXMys30.dll.bkup로, DBXMysA30을 DBXMys30.dll로 이름을 바꿀 수 있습니다. 혹은, dbxdrivers.ini 파일에 새 항목을 추가하고 DBXMysA30.dll을 LibraryName으로 지정해도 됩니다.

    새로운 기능들

    dbExpress 4 프레임워크

델파이 데이터베이스 드라이버 프레임워크. 델파이로 작성된 객체 지향 드라이버 프레임워크입니다.

델리게이트 드라이버 지원. A 델리게이트(delegate) 드라이버는 애플리케이션과 실제 드라이버 사이의 드라이버입니다. 델리게이트 드라이버를 이용하면 dbExpress 4 프레임워크의 모든 공개 메소드 및 프로퍼티의 처리 전, 후에 작업을 추가할 수 있습니다. 델리게이트 드라이버는 연결 풀링, 드라이버 프로파일링, 추적, 감사의 목적에 유용합니다. 델리게이트 드라이버는 쉽게 구현할 수 있습니다. 더 자세히 알아보려면 DBXCommon 유닛 소스의 시작 부분의 문서화된 주석을 참고하십시오.

TDBXPool 델리게이트 드라이버. 모든 dbExpress 드라이버에 대한 연결 풀링을 제공합니다.

TDBXTrace 델리게이트 드라이버. 강력한 추적 기능을 제공합니다. 모든 추적된 메소드 및 프로퍼티에 대해 델파이 코드를 생성해줍니다.

확장 가능한 명령 Extensible Commands. 사용자 정의 "command type" 프로퍼티를 지정하여 SQL 문이나 스토어드 프로시저가 아닌 명령을 사용할 수 있습니다. 이 프로퍼티는 드라이버 및 델리게이트 드라이버 개발자가 자신만의 명령 타입을 도입할 수 있도록 해주는 문자열 값입니다. TDBXPool 델리게이트 드라이버는 "show pools" 명령을 구현하기 위해 이 기능을 이용하며, 모든 연결 풀의 현재 상태에 대한 정보를 리턴합니다.

소스 코드 문서화(documentation). 모든 퍼블릭 메소드, 프로퍼티, 이벤트에 대해 헬프 인사이트와 연동합니다. --doc 델파이 컴파일러 스위치를 이용하여 XML/HTML 문서(documentation)를 생성할 수 있습니다.

단일 소스. dbExpress 4 소스 코드는 Win32 and .NET 플랫폼 양쪽 모두에서 컴파일 가능합니다.

dbExpress 4 소스 코드. dbExpress 4 프레임워크에 대한 전체 소스 코드가 제공됩니다.

듀얼 인터페이스 드라이버. 모든 코드기어 dbExpress 드라이버에는 이전의 dbExpress 3 및 새로운 dbExpress 4 인터페이스를 모두 구현되어 있습니다.

dbExpress 3 어댑터 드라이버. dbxadapter30.dll DLL은 기존의 dbExpress 3 드라이버에 대해 dbExpress 4 인터페이스를 제공합니다. 이렇게 함으로써 애플리케이션이 기존의 서드파티 dbExpress 3 드라이버를 dbExpress 4로 사용할 수 있게 되었습니다.

예제
  • CTS (Certification Test Suite for the dbExpress 4 Framework). 이것은 드라이버 호환성 테스트 스위트이며, 또한 dbExpress 4 프레임워크를 직접 사용하는 좋은 예제이기도 합니다.
  • 델리게이트. TDBXTrace나 TDBXPool 같은 드라이버 델리게이트 구현의 사용 편의성과 강력함을 보여줍니다.

    단일 소스 dbExpress VCL 컴포넌트

통합된 코드 기반으로 더 읽거나 디버그, 관리하기 쉬워졌습니다.

VCL은 이제 dbExpress 데이터베이스 드라이버를 새로운 dbExpress 4 프레임워크를 이용하여 액세스합니다.

    새로운 데이터베이스 드라이버들

  • InterBase 2007
  • MySQL 4.1 및 5.0

    새로운 유니코드 가능 데이터베이스 드라이버들

  • InterBase 2007
  • MySQL 4.1 및 5.0
  • 오라클
MS-SQL의 유니코드 지원은 이미 제품에 포함되어 있습니다.

    오라클 dbExpress 유니코드 및 ANSI 드라이버

dbExpress에는 유니코드 및 ANSI 드라이버 두가지 모두 포함되어 있습니다. 유니코드 버전은 dbxoraW30.dll이며 ANSI 버전은 dbxora30.dll입니다.

    데이터베이스 변경 주의 사항

    dbExpress 2.5 지원 안됨

dbExpress 2.5는 이번 버전에서는 더 이상 지원되지 않습니다.

    새 MySQL dbExpress 드라이버

새 MySQL 드라이버 dbxmys30.dll가 추가되었습니다. 이 드라이버는 유니코드 문자열을 지원합니다. 이 드라이버는 MySQL의 MySQL 4.1 및 5.0 서버의 libmysql.dll과만 동작합니다. dbxmys30.dll은 이전 버전의 libmysql.dll과는 동작하지 않습니다.

이전의 MySQL 드라이버는 그대로 제품에 포함되어 있지만 dbxmysA30.dll로 이름이 변경되었습니다. 유니코드가 아닌 ASCII 문자열만을 지원한다는 것을 의미하기 위해 DLL 이름에 "A"가 추가되었습니다. dbxmysA30.dll은 MySQL 서버 4.0 이하 버전을 지원하는 MySQL의 libmysql.dll과만 사용되어야 합니다.

    델리게이트 드라이버

두 가지 델리게이트 드라이버가 제공됩니다.
  • DBXTrace
  • DBXPool

    dbExpress VCL 컴포넌트

대부분의 애플리케이션은 dbExpress VCL의 변경에 영향을 받지 않습니다. 하지만 일부 없어지거나 비슷한 기능으로 대체된 메소드, 프로퍼티, 이벤트, 상수, enum들도 있습니다. 이런 변경은 다음과 같은 이유로 필요했습니다.
  • dbExpress 4 프레임워크에서는 dbExpress 3에서 사용했던 C 스타일의 COM 인터페이스 대신 델파이 스타일로 바뀜.
  • dbExpress VCL 컴포넌트를 단일 소스로 통합함. 이제 dbExpress VCL 컴포넌트의 네이티브 버전과 .NET 버전 사이에 높은 수준의 호환성이 생김.
    알려진 호환성 문제들:
  • dbExpress 유닛은 없어졌으며 더 이상 필요하지 않습니다. 이 유닛의 내용 대부분은 DBXCommon과 SQLExpr 유닛으로 이동되었습니다.
  • dbExpress 유닛에 있었던 모든 클래스, 인터페이스, enum, 상수는 제거되거나 이름이 바뀌거나 대체되었습니다. 이름이 바뀌거나 대체된 것들은 DBXCommon 혹은 SQLExpr 유닛의 인터페이스 섹션에 있습니다.
  • 정적 드라이버 라이브러리는 더 이상 지원되지 않습니다. 네이티브 드라이버가 델파이 실행 파일에 링크될 수 있도록 해주었던 델파이 유닛에 링크되는 스태틱 라이브러리가 더 이상 지원되지 않습니다. 이런 델파이 유닛에는 DBExpasa, DBExpDB2, DBExpInf, DBExpINT, DBExpMSS, DBExpMYS, DBExpMySQL, DBExpORA, DBExpt 유닛이 있었습니다.

    Win32 플랫폼에서의 dbExpress 애플리케이션 배포

    패키지의 사용

Project|Options|Packages에서 Build with runtime packages 옵션을 체크합니다. DbxCommonDriver100.bpl 파일을 여러분의 애플리케이션과 함께 배포해야 합니다. 이전 버전들에서와 마찬가지로, 여러분의 애플리케이션이 DBX*.dll 동적 링크 dbExpress 드라이버를 사용하는 경우 반드시 함께 배포되어야 합니다.

    유닛 인터페이스 호환성

대부분의 경우 이 제품은 BDS2006과 유닛 인터페이스 호환성을 가지고 있습니다. 하지만, dbExpress VCL은 SQLExpr, DBXpress, SQLConst의 세 유닛 때문에 이런 호환성의 예외가 됩니다. SQLExpr만이 컴포넌트를 포함하고 있습니다. DBXpress는 없어졌습니다(deprecated). BDS2006 버전의 dbExpress100.bpl과의 충돌을 피하기 위해 임시적으로 dbExpress100.bpl은 dbExpress4100.bpl으로 이름이 변경되었습니다. "4"는 이 dbExpress 패키지가 dbExpress 4 드라이버를 위한 것이라는 것을 의미합니다. VCL 11.0 버전이 공개될 때는 일반적인 VCL 이름 규칙대로 dbExpress4100.bpl의 이름이 dbExpress110.bpl로 바뀌게 될 것입니다.

    지원되는 서버

    dbExpress

  • InterBase 2007, 7.5.1, 7.1*, 7.0*, 6.5* (All) (드라이버 dbxINT30.dll, 클라이언트 GDS32.DLL)
  • Adaptive Sybase Anywhere 9, 8* (Ent) (드라이버 dbxASA30.dll, 클라이언트 dbodbc9.dll)
  • DB2 UDB 8.x, 7.x* (Ent) (드라이버 dbxDB230.dll, 클라이언트 db2cli.dll)
  • Informix 9.x (Ent) (드라이버 dbxINF30.dll, 클라이언트 isqlb09a.dll)
  • MSSQL 2005, 2000 (Ent) (드라이버 dbxMSS30.dll, 클라이언트 oledb.dll)
  • MySQL 4.0.24 (All) (드라이버 dbxMYSA30.dll, 클라이언트 libmysql.dll)
  • 노트: 델파이 2006의 dbxMYS30.dll과 동일하며 이름만 바뀜.
  • MySQL 5.0.27, 4.1.22* (All) (드라이버 dbxMYS30.dll, 클라이언트 libmysql.dll)
  • Oracle 10g, 9.2.0*, 9.1.0* (Ent) (드라이버 dbxora30.dll, Driver dbxoraW30.dll, 클라이언트 OCI.DLL)
  • Sybase 12.5 (Ent) (드라이버 dbxASE30.dll, 클라이언트 libct.dll & libcs.dll)

*해당 버전의 데이터베이스와 완전히 인증되지 않은 드라이버.

Top

    디버거 관련

  • 코드에서 데이터 브레이크포인트를 설정하려고 시도할 때 프로그램 오동작이 일어날 수 있습니다. 예를 들어, VMT 슬롯에 데이터 브레이크포인트를 설정하면 프로그램이 잘못된 위치로 점프합니다. (주소의 마지막 바이트에 0xcc를 쓰게 됩니다)
  • System Mechanic 7 Pro를 설치하면 통합 디버거가 동작하지 않게 됩니다. 현재 테스트된 결과로는 프로세스가 즉각 종료되고 이벤트 로그에 진단 메시지가 기록되었습니다. 서비스 관리자에서 "iolo DMV Service"의 실행을 중지시킴으로써 디버그 기능을 되살릴 수 있습니다.

Top

    문서 관련

  • 패키지 에러가 발생하여 IDE에서 온라인 헬프가 동작하지 않을 때는, .NET 2.0 프레임워크 SDK가 완전히 설치되지 않았기 때문일 수 있습니다. 제품에서 사용되는 헬프 뷰어는 .NET 2.0 프레임워크 SDK에 포함되어 있습니다. .NET 프레임워크가 정확히 설치되었을 때는 세가지 옵션 모두(Product Documentation 포함) 체크되어 있는지 확인해보십시오. When the .NET Framework is explicitly installed, you should check all three available options (including Product Documentation).

    이 문제를 해결하려면:
    1. .NET 프레임워크 SDK를 언인스톨합니다. C:\Program Files\microsoft.NET\SDK 디렉토리에 있습니다.
    2. 제품을 언인스톨합니다.
    3. 시스템을 리부팅합니다.
    4. 제품을 다시 설치합니다. 이 과정에서 다른 필요한 소프트웨어와 함께 .NET 2.0 프레임워크 SDK도 설치됩니다.
  • 헬프를 위해 F1을 눌렀을 때, 기본 소스로 온라인 헬프를 사용할지 로컬 헬프를 사용할지 혹은 온라인 헬프를 사용하지 않을지를 물러보는 다이얼로그가 나타날 수 있습니다. 브라우저가 정확한 헬프 파일을 찾도록 하게 하기 위해 두번째 옵션 "Use local Help as primary source"을 선택하십시오.

Top

    인터내셔널 관련

  • 알파벳이 아닌 문자를 포함하고 있는 소스 파일 이름이 프로젝트 패스에 있으면 브레이크포인트가 제대로 인식되지 않고 잘못된 것으로 나타날 수 있습니다.
  • IME(input method editor)가 실행되고 있을 경우 간혹 .NET 프레임워크의 버그로 인한 에러로 긴 지연(약 5분)이 발생하고 에러 메시지가 나타날 수 있습니다. 2, 3회 정도 발생한 후 에러는 더 이상 발생하지 않습니다. 모든 언어 윈도우가 잠재적으로 영향을 받을 수 있습니다.

    이 에러를 피하려면, 다음의 레지스트리 항목을 생성(혹은 수정)하십시오.

    HKEY_CURRENT_USER\Console\LoadConIme

    REG_DWORD 타입이어야 하며 그 값은 0으로 설정하시오.

Top

    투게더 관련

  • C++빌더 2007에서는 통합되어 있는 모델링 툴인 투게더는 리드 온리 모델링만 지원합니다. 다시 말해 코드 생성은 되지 않고 코드 비주얼라이제이션(code visualization)만 가능합니다. 델파이 2007 for Win32에서는 투게더가 온라인 헬프에서 설명하는 모든 모델링 기능을 지원합니다.
  • 투게더 코드 비주얼라이제이션이 C++ 프로젝트에서 동작하지 않으면 프로젝트 매니저에서 헤더 파일들(.h or .hpp)을 프로젝트에 포함시키십시오. 이렇게 하면 투게더 모델링 툴이 정보를 이용할 수 있게 됩니다.
  • 프로젝트에서 투게더 지원을 제거한 후에는 프로젝트 매니저에서 다이어그램 지원을 제거할 수 없습니다. 이 파일들을 제거하려면 IDE 메인 메뉴 아이템Project | Remove from Project을 선택하십시오. 다이어그램 지원 파일들이 리스트에 나타납니다. 여러 항목들을 선택하여 제거할 수 있습니다.
  • Together refactorings를 선택했을 때 모델링 지원이 비활성화되었을 경우, 프로젝트에 모델링 지원을 활성화하겠느냐는 메시지를 보게 됩니다. 투게더 리팩토링을 사용하려면 이 메시지에서 반드시 "Yes"를 선택해야 합니다.

Top

    VCL/RTL 관련

  • 윈도우 비스타를 위한 세가지 새로운 VCL 다이얼로그들이 추가되었습니다.
    • TCustomFileOpenDialog
    • TCustomFileSaveDialog
    • TTaskDialog
    이 컨포넌트들은 윈도우 비스타 다이얼로그들의 래퍼입니다. 전역 변수 UseLatestCommonDialogs가 true로 설정되면 비스타 시스템에서는 자동으로 비스타 다이얼로그들이 사용됩니다.
  • TApplication에 MainFormOnTaskBar라는 새 프로퍼티가 추가되었습니다. 새로 만든 애플리케이션 프로젝트에서는 기본적으로 true이며 기존의 프로젝트에서는 false입니다. 이 프로퍼티는 윈도우의 작업표시줄 버튼이 VCL에서 어떻게 처리될지를 결정합니다. 이 프로퍼티는 기존의 애플리케이션에도 적용 가능하지만, MainForm의 Z 오더에 영향을 미치므로 기존의 동작에 문제가 없는지 반드시 확인해야 합니다. MainFormOnTaskBar는 프로그램 시작시에 설정하도록 의도되었으며 애플리케이션의 실행 시간 동안 유지되어야 합니다. 런타임에 이 프로퍼티를 수정하면 예상치 못한 동작을 할 수 있습니다. 이 변경의 주목적은 윈도우 비스타에서 도입된 몇가지 새로운 기능들을 더 잘 지원하기 위해서입니다.

Top

    SOAP 서버

디폴트 델파이 SOAP 서버 애플리케이션은 Web App Debugger와 함께는 컴파일되지 않습니다. 두 가지 회피 방법이 있습니다.

  • 라이브러리 패스에 $(BDS)\Lib\Indy9을 포함시키고 $(BDS)\Lib\Indy10을 제거합니다. 하지만 이 방법을 선택할 경우 애플리케이션이 반드시 Indy 9만을 사용해야 합니다.
  • IndySockTransport와 sockapp을 컴파일하여 $(BDS)\Lib\Indy10에 넣습니다.

Top

Copyright 2007 CodeGear Software. All rights reserved.




Server Response from: ETNASC04