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
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
to sie nazywa "dyrektywy kompilatora". o rezte pytaj googli.
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}
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
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.