Identyfikacja IDE

0

Witam,
Pisząc bibliotekę w delphi, napotkałem na pewien problem. Jak wiadomo, nie wszystkie moduły dostępne w delphi są dostępne w innych IDE. Chciałbym jednak, aby biblioteka mogła być stosowana w każdym środowisku. Dla tego chciałbym uniewidocznić dołączanie pewnych modułów/wywołania funkcji które dostępne są tylko w delphi. Czy da się zrobić coś takiego? domyślam się, że jeśli tak, to trzeba będzie użyć ifdef costam, jednak nie wiem co tam dalej wpisać.
Kompilacja samej biblioteki nie wchodzi w grę, chcę aby biblioteka była udostępniana jako *.pas
Z góry dzięki za pomoc
Pozdrawiam

0

Chciałbym jednak, aby biblioteka mogła być stosowana w każdym środowisku.

Chcesz żeby jakieś pascalowe klamoty kompilowały się w czymś innym niż Delphi? A w czym? Może w Visual C#? Sory, czy to dobrze się czujesz? Możesz co najwyżej skompilować to jako dll, to jedyny sposób

0

to sie nazywa "dyrektywy kompilatora". o rezte pytaj googli.

0

masz ctr+c ctrl+v z ustawień synedita

{$IFDEF LINUX}
  {$DEFINE SYN_LINUX}
  {$DEFINE SYN_KYLIX}
  {$DEFINE SYN_COMPILER_6}
  {$DEFINE SYN_DELPHI}
  {$DEFINE SYN_DELPHI_6}
{$ENDIF}

{$IFDEF VER180}
  {$DEFINE SYN_COMPILER_10}
  {$DEFINE SYN_DELPHI}
  {$DEFINE SYN_DELPHI_2006}
{$ENDIF}

{$IFDEF VER170}
  {$DEFINE SYN_COMPILER_9}
  {$DEFINE SYN_DELPHI}
  {$DEFINE SYN_DELPHI_2005}
{$ENDIF}

{$IFDEF VER160}
  {$DEFINE SYN_COMPILER_8}
  {$DEFINE SYN_DELPHI}
  {$DEFINE SYN_DELPHI_8}
{$ENDIF}

{$IFDEF VER150}
  {$DEFINE SYN_COMPILER_7}
  {$IFNDEF BCB}
    {$DEFINE SYN_DELPHI}
    {$DEFINE SYN_DELPHI_7}
  {$ELSE}
    {.$DEFINE SYN_CPPB}
    {.$DEFINE SYN_CPPB_7}
  {$ENDIF}
{$ENDIF}

{$IFDEF VER140}
  {$DEFINE SYN_COMPILER_6}
  {$IFNDEF BCB}
    {$DEFINE SYN_DELPHI}
    {$DEFINE SYN_DELPHI_6}
  {$ELSE}
    {$DEFINE SYN_CPPB}
    {$DEFINE SYN_CPPB_6}
  {$ENDIF}
{$ENDIF}

{$IFDEF VER130}
  {$DEFINE SYN_COMPILER_5}
  {$IFNDEF BCB}
    {$DEFINE SYN_DELPHI}
    {$DEFINE SYN_DELPHI_5}
  {$ELSE}
    {$DEFINE SYN_CPPB}
    {$DEFINE SYN_CPPB_5}
  {$ENDIF}
{$ENDIF}

{$IFDEF VER125}
  {$DEFINE SYN_COMPILER_4}
  {$DEFINE SYN_CPPB}
  {$DEFINE SYN_CPPB_4}
{$ENDIF}

{$IFDEF VER120}
  {$DEFINE SYN_COMPILER_4}
  {$DEFINE SYN_DELPHI}
  {$DEFINE SYN_DELPHI_4}
{$ENDIF}

{$IFDEF VER110}
  {$DEFINE SYN_COMPILER_3}
  {$DEFINE SYN_CPPB}
  {$DEFINE SYN_CPPB_3}
{$ENDIF}

{$IFDEF VER100}
  {$DEFINE SYN_COMPILER_3}
  {$DEFINE SYN_DELPHI}
  {$DEFINE SYN_DELPHI_3}
{$ENDIF}

{$IFDEF VER93}
  {$DEFINE SYN_COMPILER_2}  { C++B v1 compiler is really v2 }
  {$DEFINE SYN_CPPB}
  {$DEFINE SYN_CPPB_1}
{$ENDIF}

{$IFDEF VER90}
  {$DEFINE SYN_COMPILER_2}
  {$DEFINE SYN_DELPHI}
  {$DEFINE SYN_DELPHI_2}
{$ENDIF}
0

dzięki Misiekd, właśnie o to mi chodziło. Mam tylko jeszcze jedno pytanie. W przykładzie zamieszczonym wyżej jest sprawdzenie każdej wersji po kolei. Jest to dość kodochłonne. Nie ma jakiejś krótszej metody w stylu {$IFDEF DELPHI} ? Szukałem w internecie ale nic oprócz tego: http://delphi.about.com/od/objectpascalide/a/compiler_ver.htm (czyli w zasadzie tego co podał Misiekd) nie znalazłem. Chyba że jest inny sposób na ukrycie TProgressBar czy dołączania modułu IdHashMessageDigest w innych kompilatorach, np FreePascal

0

Free Pascal definiuje FPC. Standardowo kod mający się kompilować w Delphi i Free Pascalu zaczynamy tak:

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}

co włącza tryb większej zgodności z Delphi i wyłącza rozszerzenia charakterystyczne dla FPC.
Możesz sprawdzić czy to nie jest FPC tak:

{$IFNDEF FPC}
  writeln('to nie jest Free Pascal ani Lazarus, więc prawdopodobnie Delphi');
{$ENDIF}

Pamiętaj, że pełną pewność masz dopiero po przetestowaniu w każdej możliwej wersji Delphi, bo zawsze coś się może posypać w starszej lub nowszej niż twoja. W FPC też tak się dzieje, ale że to jest open source, jest to jakby mniejszy problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1