Type Tanımlamaları ile ilgili...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Type Tanımlamaları ile ilgili...

Mesaj gönderen uğur alkan »

Kod: Tümünü seç

unit dav_lib;

interface

uses
    Windows,
    SysUtils,
    Drvr,
    status_strings,
    PCI_Regs,
    drvr_Int_Thread,
    Bits;

var
    DAV_ErrorString : String;        { this STRING is set to an error message, if one occurs }
    DATA:INTEGER;
{ internal data structures }
type DAV_INT_RESULT = record
    dwCounter : DWORD;   { number of interrupts received }
    dwLost : DWORD;      { number of interrupts yet to be handled }
    fStopped : BOOL;     { was interrupt disabled during wait }
 end;

type PDAV_INT_RESULT = ^DAV_INT_RESULT;

type DAV_INT_HANDLER = procedure(pWorker : POINTER; intResult : PDAV_INT_RESULT) stdcall; 

type DAV_MODE = INTEGER;
const 
    DAV_MODE_BYTE = 0; DAV_MODE_WORD   = 1; DAV_MODE_DWORD  = 2; 

type DAV_ADDR = INTEGER;

const
    DAV_AD_BAR0 = AD_PCI_BAR0; 
    DAV_AD_BAR1 = AD_PCI_BAR1;
    DAV_AD_BAR2 = AD_PCI_BAR2; 
    DAV_AD_BAR3 = AD_PCI_BAR3; 
    DAV_AD_BAR4 = AD_PCI_BAR4;
    DAV_AD_BAR5 = AD_PCI_BAR5; 
    DAV_AD_EPROM = AD_PCI_BAR_EPROM;

{ Number of IO and memory ranges }
const
    DAV_ITEMS = AD_PCI_BARS;

type DAV_INT_INTERRUPT = record
    Int     : WD_INTERRUPT;
    hThread : HANDLE;
    funcIntHandler : DAV_INT_HANDLER;
end;

type DAV_ADDR_DESC = record
    index : DWORD;
    fIsMemory : BOOLEAN;
    fActive : BOOLEAN;
end;

type DAV_STRUCT = record
    hWD : HANDLE;
    Int : DAV_INT_INTERRUPT;
    hEventHandle : PEVENT_HANDLE_T;
    pciSlot : WD_PCI_SLOT;
    addrDesc : array[0..DAV_ITEMS-1] of DAV_ADDR_DESC;
    cardReg : WD_CARD_REGISTER;
end;

type DAV_HANDLE = ^DAV_STRUCT;
type PDAV_HANDLE = ^DAV_HANDLE;

type PBYTE  = ^BYTE;
type PWORD  = ^WORD;
type PDWORD = ^DWORD;

const DAV_DEFAULT_VENDOR_ID = $10ec;
const DAV_DEFAULT_DEVICE_ID = $8139;

{ internal function used by DAV_Open() }
function DAV_DetectCardElements(hDAV : DAV_HANDLE) : BOOLEAN;

procedure DAV_WritePCIReg(hDAV : DAV_HANDLE; dwReg : DWORD; dwData : DWORD);
function DAV_ReadPCIReg(hDAV : DAV_HANDLE; dwReg : DWORD) : DWORD;
function DAV_IsAddrSpaceActive(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR) : BOOLEAN;
procedure DAV_GetPciSlot(hDAV : DAV_HANDLE; pPciSlot : PWD_PCI_SLOT);
function DAV_CountCards (dwVendorID : DWORD; dwDeviceID : DWORD) : DWORD;
function DAV_Open (phDAV : PDAV_HANDLE; dwVendorId : DWORD; dwDeviceId : DWORD; nCardNum : DWORD) : BOOLEAN;
procedure DAV_Close(hDAV : DAV_HANDLE);
function DAV_RegisterDriver() : DWORD;
{ General read/write function }
procedure DAV_ReadWriteBlock(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR; dwOffset : DWORD; fRead : BOOLEAN; buf : POINTER; dwBytes : DWORD; mode : DAV_MODE);
function DAV_ReadByte(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR; dwOffset : DWORD) : BYTE;
function DAV_ReadWord(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR; dwOffset : DWORD) : WORD;
function DAV_ReadDword(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR; dwOffset : DWORD) : DWORD;
procedure DAV_WriteByte(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR; dwOffset : DWORD; data : BYTE);
procedure DAV_WriteWord(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR; dwOffset : DWORD; data : WORD);
procedure DAV_WriteDword(hDAV : DAV_HANDLE; addrSpace : DAV_ADDR; dwOffset : DWORD; data : DWORD);

{ handle interrupts }
{ Int }
function DAV_IntIsEnabled (hDAV : DAV_HANDLE) : BOOLEAN;
procedure DAV_IntHandler (pData : POINTER);
function DAV_IntEnable (hDAV : DAV_HANDLE; funcIntHandler : DAV_INT_HANDLER) : BOOLEAN;
procedure DAV_IntDisable (hDAV : DAV_HANDLE);
{ Plug and play , Power managment functions }
function DAV_RegisterEvent(hDAV : DAV_HANDLE; dwAction : DWORD; dwVendorID : DWORD; dwDeviceID : DWORD;
    PciSlot :WD_PCI_SLOT; funcHandler : EVENT_HANDLER_FUNC) : BOOLEAN;
procedure DAV_UnregisterEvent(hDAV : DAV_HANDLE);

Bu kod PCI bir arabirim ile haberleşiyor... Ancak type tanımları çok karışık geldiği için bir iki prosedür dışında bişey çalıştıramadım. Delphi ile sadece donanım boyutunda uğraştığım için bilgi eksikliğimden kaynaklanıyor.
function DAV_DetectCardElements(hDAV : DAV_HANDLE) : BOOLEAN; mesela bu foksiyonda DAV_HANDLE tipi ne olacak ve ne değer alacak yardımcı olursanız sevinirim
^DAV_INT_RESULT bide bu tip tanımlamada '^' işaretin özel bir anlamı varmıdır.
çok teşekkür ederim...
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.

Kod: Tümünü seç

type DAV_STRUCT = record
    hWD : HANDLE;
    Int : DAV_INT_INTERRUPT;
    hEventHandle : PEVENT_HANDLE_T;
    pciSlot : WD_PCI_SLOT;
    addrDesc : array[0..DAV_ITEMS-1] of DAV_ADDR_DESC;
    cardReg : WD_CARD_REGISTER;
end;

type DAV_HANDLE = ^DAV_STRUCT; 
burda görüldüğü üzere DAV_HANDLE, DAV_STRUCT tipinde bir pointer.
^ işareti pointer anlamına geliyor.

Kod: Tümünü seç

type PBYTE  = ^BYTE; 
var 
  a:pbyte;
  b:^Byte;
  c:Byte;
burda c bildiğimiz byte tipinde bir değişken.
a ve b c tipinde bir datayı gösteren işaretçiler.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

DAV_STRUCT Record tipinde bir değişken anladığım kadarıyla bu değişkene hangi değerler atanabilr ve nerelerde kullanılabilir
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Record tipindeki değişkenlerin yanına nokta imi koyup yanına type tanımının içeriğindeki bir alt değişken yazılır. O değişken de bir Type ile tanımlanmış record olabilir. Aşağıdaki örnek bunu gösteriyor.

Kod: Tümünü seç

type DAV_INT_INTERRUPT = record 
    Int     : WD_INTERRUPT; 
    hThread : HANDLE; 
    funcIntHandler : DAV_INT_HANDLER; 
end; 

type DAV_STRUCT = record 
    hWD : HANDLE; 
    Int : DAV_INT_INTERRUPT; 
    hEventHandle : PEVENT_HANDLE_T; 
    pciSlot : WD_PCI_SLOT; 
    addrDesc : array[0..DAV_ITEMS-1] of DAV_ADDR_DESC; 
    cardReg : WD_CARD_REGISTER; 
end; 

Var
  aaa : DAV_STRUCT;
begin
  aaa.hWD := birprogramHandle;
  aaa.Int.hThread := herhangibirHandle;
  ...
  ...
end;
"^" ile @aslangeri'nin de belirttiği gibi Pointer (işaretçi) olduğunu bildirir. Pointer nedir ne değildir şimdi burada sana ders vermeyelim, araştırarak bulmalısın. Sadece şu kadarını söyleyebilirim.

- Her değişken veya type tanımı vb. hafızada bir yere yazılırlar. Bunların hafızaki adreslerini verir. Bu adresler ne işe yarar, başka bir type tanımı veya değişkene referans olarak gösterilirse o referans gösterdiğin de otomatikman bu değeri alır hatta manipüle edecek düzeyde kendini ona bağlar.

- Bu durum ne fayda sağlar. Öncelikle veri transferi olmadığından hız, sonra birbirinden farklı projeler arasında veri paylaşımı veya ortak kullanımı vb. gibi durumlarda kullanılır.
Resim
Resim ....Resim
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

bide şu handle olayı hakkında biraz bilgi alabilirmiyim yardımlarınız için çok teşekkür ederim
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Soru ne idi şimdi ne oldu ? Ayrıca sözlük sorularının cevabını çok kolay bulabilirsin.

- Hocam burada aynı başlık altında ard arda soru sormak araştırma yaptığın anlamına gelmiyor. Araştırma dediğimiz şey, soru sormadan önce arama yapmak ve sonuçları değerlendirmek şeklindedir. Sonra burada bulgularını paylaşır ve anlamadığın yeri sorarsın. Öncelikle bunu belirteyim... :!:

- Handle konusuna da girersek takip eden ve gelecek diğer soru çeşitliliğini tahmin ettiğimden arama yaparak bu soruların cevabını kendin bulmanı ve kavrayamadığın yerde yeni başlık açarak örnekleyerek sormanı tavsiye ediyorum.
Resim
Resim ....Resim
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

Öncelikle özür dilerim. Dün bu konu hakkında ve handle olayında form üzerinde uzun bir araştırma yaptım ancak tip konusunu anlıyacak kadar detay bulamadım hele pointer üzerinden tip tanımlasında hiç örnek bulamadım. Şu anda yukarıda belirtiğiniz açıklamalar sayesinde neresinin pointer neresini değişken olduğunu anlayabiliyorum. Kitaplarda ise genllikle üstün körü geçilmiş İlginize çok teşekkür ederim. Handle konusunuda yeni başlık altına açayım.
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Cevapla