interface uses ile implementation uses arasındaki fark

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Jire
Üye
Mesajlar: 167
Kayıt: 07 Eki 2007 01:20

interface uses ile implementation uses arasındaki fark

Mesaj gönderen Jire »

herkese merhaba.

benim bir tane Diger.pas diye dosyam var.

Kod: Tümünü seç

unit Diger;

interface

uses SysUtils, Windows;

function GetVersion(sFileName: string): string;

implementation

function GetVersion(sFileName: string): string;
var
  VerInfoSize: DWORD;
  VerInfo: Pointer;
  VerValueSize: DWORD;
  VerValue: PVSFixedFileInfo;
  Dummy: DWORD;
begin
  VerInfoSize := GetFileVersionInfoSize(PChar(sFileName), Dummy);
  GetMem(VerInfo, VerInfoSize);
  GetFileVersionInfo(PChar(sFileName), 0, VerInfoSize, VerInfo);
  VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
  with VerValue^ do
  begin
    Result := IntToStr(dwFileVersionMS shr 16);
    Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF);
    Result := Result + '.' + IntToStr(dwFileVersionLS shr 16);
    Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF);
  end;
  FreeMem(VerInfo, VerInfoSize);
end;

end.
Bunu Ana formum içinde kullanmak istediğimden dolayı

Kod: Tümünü seç

interface
uses Diger;

Kod: Tümünü seç

implementation
uses Diger;
yukardaki şekillerde denedim ve iki şekilde de çalıştı.

Benim amacım fonksiyonlarımı kategoriler halinde pas dosyalarında tutmak (resim.pas, diger.pas, kaydet.pas) tarzı.

Sizce hangisini kullanmalıyım aralarındaki farklar neler hiç bilmiyorum. Anlatırsanız memnun olurum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: interface uses ile implementation uses arasındaki fark

Mesaj gönderen sabanakman »

Bazı tanımlar Interface bloğundadır. Bunun da nedeni burada tanımlanan kodlar diğer unitlerden de kullanılabilmesi içindir (Mesela TForm1 gibi bir form tanımı). Tabi burada tanımlanan bilgiler diğer unitlerdeki bilgilere ihtiyaç duyabilir (TForm2 için TForm'un tanımlı olduğu unit'e "Forms.pas" ihtiyaç vardır). Eğer bu Forms untini TForm2 tanımından önce uses'a eklemezsen hata alırsın. Bu gibi interface'de tanımlanan değişken, fonksiyon ve nesnelerin ihtiyaç duyduğu unitleri interface bloğundaki uses'ta tanımlamak zorundasın ama diğer durumda, sadece implementation bloğundan sonra kullanılacak modüller (unitler) için böyle bir zorunluluk yoktur. İster interface bloğundaki istersen de implementation bloğundaki uses satırında kullanabilirsin. Burada asıl dikkat etmen gereken interface bloğunda birbirini çapraz çağıracak bir yapı kurmaman. Yoksa hata alır derleme yapamazsın. Mesela Unit1'in interface bloğunda uses Unit2 kullanır ve Unit2'nin de interface bloğunda uses Unit1 dersen hata alırsın ve derleme işlemi gerçekleşmez.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Jire
Üye
Mesajlar: 167
Kayıt: 07 Eki 2007 01:20

Re: interface uses ile implementation uses arasındaki fark

Mesaj gönderen Jire »

Teşekkürler. Az çok anladım :P .
Cevapla