Proje adına göre derleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Proje adına göre derleme

Mesaj gönderen m_ekici »

Windows servis olarak çalışan ve socket ile haberleşen bir projenin içindeki kodların bir kısmını (DB den kaydı alıp ticari bir programa aktarma yapıyor) test projem içinde kullanmak istiyorum. projeyi yazarken sürekli test etmem gerekiyor, fakat hem servisi açıp kapamam hemde aynı bilgisayarda socket sıkıntısı yaşamamak için kayıt için kullandığım kod bölümünü normal proje içerisinde de test etmek istiyorum. direktifler ile proje adına göre derleme yaptırabilirmiyim.

Kod: Tümünü seç

procedure TSDF.ServisMsjEkle(Msj:String);
begin
{ ???? Servis projesinde iken burası derlensin }
try
MSJ_.Close;
MSJ_.SQL.Clear;
MSJ_.SQL.Add('INSERT INTO INFO_SERVIS_MESAJ (MESAJ,TARIH) VALUES ('+QuotedStr(Msj)+',GETDATE())');
MSJ_.ExecSQL;
finally
end;
{ --- }

{ ???? normal projede burası derlensin }
Memo1.lines.add (Msj);
{ --- }
end;


{$DEFINE xxxx} direktifi buldum fakat çalışmadı. Bu direktifi kullanma şekli nasıldır?

Kod: Tümünü seç

{$IFDEF xxxx} 
Showmessage('Bu Program xxxx dir');
{$ELSE} 
Showmessage('Bu Program xxxx değildir');
{$ENDIF} 

Delphi Xe2 kullanıyorum.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Proje adına göre derleme

Mesaj gönderen vkamadan »

Merhaba ,
$DEFINE ve $IFDEF örnekte belirttiğiniz gibi kullanılıyor, dikkat etmeniz gereken $DEFINE ı en projenin en üstünde tanımlamanız.
sorun yaşamaya devam ederseniz basit bir uniti komple ekleyin kullanımızı gözden geçirelim.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Proje adına göre derleme

Mesaj gönderen m_ekici »

Aynı procedure ün içinde çalışıyor. Global değişken gibi çalışır diye düşünmüştüm, değilmiş. tşk.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Proje adına göre derleme

Mesaj gönderen vkamadan »

m_ekici yazdı:Aynı procedure ün içinde çalışıyor. Global değişken gibi çalışır diye düşünmüştüm, değilmiş. tşk.
merhaba ,
yo hayır aksine tamamen globaldir bence bir kullanım yanlışlığınız var dilerseniz basitleştirilmiş unitinizi paylaşın.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Proje adına göre derleme

Mesaj gönderen freeman35 »

constant gibi düşün, bir değer atanamaz, sadece adı varmı yokmu diye kontrol edebilirsin. ifdef ler de kullanırsan tanımlanmamışsa compiler o bloğu derlemeye dahil etmez. çalıştırmaz değil, yok sayar.
define sadece glabal değildir, eklenen unit içinde erişim sağlanabilir, bu yüzdende en pratik yöntem, tanımlanan kelime bir inc file içine eklenir, bu inc file her kullanılmak istenen unit e eklenir {$I falanca.inc} gibi iptal edilmek istendiğinde gene en pratik yol, in içindeki satrı {.$DEFINE xxxxx} yani başına bir nokta yada karakter ekleyip tanımlanmamış hale getirmek. Sonra projeyi tekrar derlemek yeterli.
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Proje adına göre derleme

Mesaj gönderen sabanakman »

İyi günler. Bir başka teknik ise {$IF Declared(PaketKodu)}..{$IFEND} gibi bir yöntemle PaketKodu isimli değişken veya sabit tanımı yapılmış mı yapılmamış mı kontrol edilebilir. Bir başka yöntem olarak paket kodu değeri her ne ise buna göre şartlar vererek derlenecek kodlara değişik şekiller verilebilir. Burada dikkat etmek gereken mesele "PaketKodu" değeri (const PaketKodu=1; //gibi) değişmez sabit olarak tanımlı olmalıdır.

Kod: Tümünü seç

{$IF PaketKodu=0}
  ShowMessage('Basit Paket');
{$ELSEIF PaketKodu=1}
  ShowMessage('Temel Paket');
{$ELSEIF PaketKodu=2}
  ShowMessage('Tam Paket');
{$ELSE}
  ShowMessage('Tanımlanmayan Paket');
{$IFEND}
Burada PaketKodu sabiti temel bir unit içinde belirlendikten sonra tüm diğer form ve unit içerisinde bu sabite göre derlemeye şekil verilebilir. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla