VB ile ilgili faydalı bir site !

Başlatan hasangurlek, 26 Ocak 2010, 10:51:10

muhittin_kaplan

:) Kafamda Bir Soru Daha Var. BDE neyki ? Borland da Kurmanız Gerekmiyormu VT Bağlantısı vs için ?
Eğer Hiç birşey yüklemeden standalone çalışsın diyorsanız PASCAL da Yazın (Size Yakın ya, Ben Olsam Qbasicte  :D yazardım)hiçbir  Sanal Makina istemez. Runtime istemez vs
Değişim Zorlamayı Seçer, Tembeller Değişimden Kaçarlar Ötelerler.
(Özlü Bir Söz Ettim Sanırım)

wsxwsx

bde sevmediysen Access vtabanı kullanırsın.

hasangurlek

@wsxwsx

Sanırım olayı koda dökmekte fayda var, diyelimki bahsettiğiniz demir kafes arkasında korunan CNC kontrolcü PC miz mekaniğe gönderilecek datayı PC deki sürücülerden birindeki yine bahsettiğiniz access veritabanından okuyor. Öncelikle sürücü aktifmi, aktifse hazırmı, ardından dosya mevcutmu, mevcutsa formatı uygunmu, dosya bulunamazsa diğer klasörlerde, diğer sürücülerde ilgili dosya aranıp bulunsunmu vs. bir sürü kontrol gerekiyor. Yukarıda bahsettiğim system.io dll i içindeki DriveInfo fonksiyonunu kullanalım ve hepsini bir kenara bırakıp sürücülerin bir listesini alalım, sürücülerin hazır olup olmadığını kontrol edelim. Öyleye bir donanım arızası sebebiyle HDD kullanım dışı kalmış olabilir. Nede olsa  tüm yazılımlar sürücü ve dosya kontrolünü bir şekilde kullanır. Aşağıdaki kodun standart olarak çalıştığı işletim sistemleri; Windows 7, Windows Vista, Windows XP xxxx , Windows Server xxxx , Windows Millennium, Windows 98, Daha olmadı system.io.dll dosyası manuel olarak programın setup projesine dahil edilip programın kurulacağı dizine açılır ve kod çalışmak için hiç bir şart dayatmaz.

Imports System.IO
Module Module1
    Sub Main()
        Dim keypress As ConsoleKeyInfo
        Dim Suruculer() As DriveInfo = DriveInfo.GetDrives()
        Do
            For Each Drv In Suruculer
                Console.WriteLine("Sürücü : " & Drv.Name.ToString)
                Console.WriteLine("Tipi : " & Drv.DriveType.ToString.ToUpper)
                If Drv.IsReady Then
                    Console.WriteLine("Formatı : " & Drv.DriveFormat.ToString)
                    Console.WriteLine("Kapasite : " & ((Drv.TotalSize / 1024) / 1024).ToString("#.#") & " Mb")
                    Console.WriteLine("Kullanılabilir kapasite : " & ((Drv.AvailableFreeSpace / 1024) / 1024).ToString("#.#") & " Mb")
                Else
                    Console.WriteLine("Sürücü hazır değil.")
                End If
                Console.WriteLine("--------------------------------")
            Next
            Console.WriteLine("Çıkış : Q, Diğer : Test tekrarı")
            keypress = Console.ReadKey()
        Loop Until (keypress.KeyChar.ToString.ToUpper = "Q")
        Console.Clear()
    End Sub
End Module


Net platformunda VB değilde C ile kodlasaydık;
Imports System.IO yerine Using System.IO;
Dim Suruculer() As DriveInfo = DriveInfo.GetDrives() yerine DriveInfo[] Suruculer = DriveInfo.GetDrives();
For Each Drv In Suruculer yerine foreach (DriveInfo Drv in Suruculer)


vs. gördüğünüz gibi yazım kuralları dışında bir şey değişmeyecekti. Program kurulduğunda ise ufacık consol uygulamasının dışında hiç bir dosya gerekmeyecek.

Peki siz Delphi7 de bu kodu nasıl yazıyorsunuz ? Sürücülere ait bilgileri nasıl çekiyorsunuz ? Programınız arka planda windowsun hangi fonksiyonunu kullanıyor ? Başka bir bilgisayara kurmak üzere kodu derlediğinizde 20 satırlık kod için projeye neleri ilave ediyorsunuz ?
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

wsxwsx

delphi 7 de bu kısımlar için  bazı hazır bileşenler kullanıyorum. Bu bileşenlerin kodlarını incelediğimizde windows'un bazı DLL leriile irtibatta olduğu anlaşılıyor.  Bunlar da .net bileşeni değil. HID.dll  gibi bazı windows DLLi. Muhtemelen sizin DLL lerde dönüp dolaşıp aynı yer ile haberleşiyor.
Mesela HUB.dll mi ne varmış. aslında tüm usb aygıtları bilgiyi oradan alıyormuş.  Eğer cihaza  sürücü kurulduysa ozaman  kullanılan DLL gerekli işleri bizim yerimize yapmış oluyor. ama .Net ihtiyacı yok.

hasangurlek

Alıntı yapılan: "wsxwsx"delphi 7 de bu kısımlar için  bazı hazır bileşenler kullanıyorum. Bu bileşenlerin kodlarını incelediğimizde windows'un bazı DLL leriile irtibatta olduğu anlaşılıyor.  Bunlar da .net bileşeni değil. HID.dll  gibi bazı windows DLLi. Muhtemelen sizin DLL lerde dönüp dolaşıp aynı yer ile haberleşiyor.
Mesela HUB.dll mi ne varmış. aslında tüm usb aygıtları bilgiyi oradan alıyormuş.  Eğer cihaza  sürücü kurulduysa ozaman  kullanılan DLL gerekli işleri bizim yerimize yapmış oluyor. ama .Net ihtiyacı yok.

Cevabınızda kod göremedim !

"bazı hazır bileşenler" den kastınız uses sysutils ile projenize dahil ettiğiniz borland fonksiyonlarını çağırmak olabilirmi ?

Mesela KullanılabilirKapasite:= DiskFree(3);  veya  Kapasite := DiskSize(3); fonksiyonları gibi,

----------------------------------------------------------------------------

"Bu bileşenlerin kodlarını incelediğimizde windows'un bazı DLL leriile irtibatta olduğu anlaşılıyor." ifadenizden kastınızda sanırım API fonksiyonlarını içeren dll dosyaları.

O halde daha basit başka bir soru daha sorayım, siz sadece delphi 7 kütüphanelerini kullanarak nereye kadar kod yazabiliyorsunuz ?

Sonuçta NET ten bağımsız çalışmak istediğinize göre API lerlede işiniz olmamalı. Çünkü win98 bir sistemde bile win32 ve com larla birlikte NET 1.0 (dotnetredist.exe) versiyonu kurulu olur.

"Nereye kadarı" açmak için yine sürücülerden gidelim.

Diyelimki sistemde A,B,C,D,E,F etiketli sürücülerden daha fazla sayıda yani 6 adetten fazla sürücü mevcut. CNC ile ilgili hata loglarını sürücünün sabit olmaması nedeniyle yazamayacağımız bir durum ortaya çıkabilir ve kullanıcının girdiği pathin sabit bir sürücüde olması istenebilir. Bu durumda örneğin K sürücüsünün tipi USB flash mıdır, RAM bellekte hayali bir sürücümüdür, CDROOM mudur vs. gibi bir tespit yapmamız gerekir.

Bu durumda windowsa bulaşmadan yani "GetDriveType" API sini çağırmadan delphi7 de nasıl bir kod kullanıp sürücünün sabitmi, çıkartılabilirmi olduğunu öğreniyorsunuz ?
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

wsxwsx

bilmiyorum bukadar ayrıntı gerekmefi  bilgim yok. bileşenden kastım timer nesnesi gibi çeşitli özel nesneler var. bazısı delphide yazılmış. kodu açık. kimisi ticari

bazısı da activex. bunları delphide kullanmak şart değil. vb de de kulanılıyor. müsait zaman upload ederim. Hid icin kullandım

hasangurlek

Alıntı yapılan: "wsxwsx"bilmiyorum bukadar ayrıntı gerekmefi  bilgim yok. bileşenden kastım timer nesnesi gibi çeşitli özel nesneler var. bazısı delphide yazılmış. kodu açık. kimisi ticari

bazısı da activex. bunları delphide kullanmak şart değil. vb de de kulanılıyor. müsait zaman upload ederim. Hid icin kullandım

wsxwsx arkadaşım,

Önceki mesajlarımdaki örnekler her yazılımın olmazsa olmazlarındandır. Hiç bir programcı kendi yazılımına ait bile olsa her hangi bir dosyanın örneğin konfigürasyon dosyasının fiziksel varlığını kontrol etmeden okumak veya yazmak üzere açmaya kalkmaz. Dosya bulunamadı sonucu gelirsede öncelikle bakılacak durum dizinlerin ve/veya sürücünün halen mevcut olup olmadığıdır.

Konuyu bu kadar uzatmamın sebebi önceki mesajlarında kullandığın "ben programcıların kullanması için dll yazıyorm" ifadesiydi.

Amacım asla ve asla seni kırmak, küçümsemek değil. Öncelikle bunu dikkate almanı isterim. Eğer amacımın bu olmadığına itimat ediyorsanda devamını okuyabilirsin.

25 yıldır kod yazan, borlandın pascalından, microsoftun qbasicine hatta gwbasice kadar kullanmış biri olarak öncelikle şunu belirteyim ki net platformu ile birlikte diller arasındaki fark yazım kuralları kadar kaldı. Çünkü günümüzde Delphi.net ten VB.nete kadar tüm platformlar aynı altyapıyı kullanıyorlar. Peki net ortamı iyi birşeymi ? Bana göre kod geliştirme açısından mükemmel fakat dise karşı oldukça zayıf. Peki niçin VB6 ya pascala, delphiye vs. devam etmiyoruz ? Cevap ortada; ya assembly kullanacaksın yada ortamı terkedeceksin. Ortamı terk edemeyeceğimize göre, assembly ile görsellik yaratmak için yıllarca emek çekeceğimize göre mecburen kurallara uyuyoruz.

Son sorduğum sorunun cevabını en iyi delphi kodlayıcılarıda olumsuz yanıtlardı. Veya kernele ulaşmak için assembly kullanmaya kalkarlardı. Çünkü d7 de sadece 6 sürücüye ulaşabilirsin, diğerlerine ulaşmak için illaki API kullanman veya sistem başladığında hazırda beklemeye başlayan kernele ulaşman gerekir. Bu d7 deki kısıtlamaların sadece bir tanesi.

Assembly i kenara bırakırsak durum illaki API kullanımına geldiğine göre API lere müracat etmek yerine nete müracat etmek daha doğru bir davranış şekli olur. Çünkü net 1.0 bile API yordamlarının hepsini içerir. Fakat GetDriveType API si ile tek bir sürücünün sadece tipini öğrenirken DriveInfo ile tüm sürücülerin herşeyine ulaşılır, istenen veri çekilip kullanılır.

Net 3.5 da ise çok daha fazla kullanılabilir özellik mevcuttur. Sıkıştırılmış büyüklüğü 906 mb tır. Günümüzde sıradan bir HDD kapasitesinin 80 gb den az olmadığı, bir oyunun bile 3-5 gb olduğu gözönüne alınırsa hiç bir kullanıcı 906 mb için ses çıkartmaz ki zaten işletim sistemi ile birlikte ilgili versiyon makineye kurulmuştur. Otomasyon sistemleri gibi temel özellikleri içerecek bir yazılım söz konusu ise sadece 26 mb büyüklüğü olan 1.0 versiyonu bile istenen pek çok olaya izin verir.

Delphi olsun VB olsun veya full VS içinde C++, C# olsun net uyumlu dilleri kullanmaya başladığında tüm fonksiyonların ortak kullanıldığını, yazım kurallarını bildiğin herhangi bir dili kullanarak aynı projeleri istediğin dilde yazabildiğini, yazdığın kodların dili ne olursa olsun aynı sürelerde aynı işi yapabildiğini görürsün. Konu net olduğu zaman ise MSDN vazgeçilmez bir kaynaktır, şahsen ben en basit bir konuda bile ona müracat etmeden kod yazamıyorum çünkü ezberlenemeyecek kadar fazla detay sözkonusu. Tüm bunların doğrultusunda .net ile biten dilleri kullanman avantajına olacaktır. Eğer borland sıkıntı yaşamasaydı delphi.net yerine delphixx gibi bir versiyonla yoluna devam ederdi.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

hasangurlek

Bu arada Charles Petzold un bu makalesinide herkese tavsiye ederim :)
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

wsxwsx

dll yazıyorum fakat içerik tamamen bana ait değil. taşları birleştiriyorum.
farklı bir ürün halinde arzedecem.

muhittin_kaplan

PC programak için sağında solunda kitaplar, MSDN :) , internet olması gerekiyor artık. HasanGurlek Arkadaşın da dediği gibi o kadar çok teferruat varkı hangi birini ezberleyeceksin. en ufak kod parçaşında bile MSDN e başvurup kitap kurcalamak forumlara yazmak vs gerekiyor.

"Bu MCU işine yaklaşık 2-3 yıldır uğraşıyorum. Geçmiş Zaman Bu işte iyi olan bir arkadaşl açay sohbetimizde;
-Kardeşim 35 komut ne kadar güzel. demiştim
oda bana
-Keşke 35000 komutum olsa abi. demişti"

wsxwsx

Evet cümleten haklısınız. Gerektiği zaman .net kullanmak lazım. Bunu kullanmak için MSDN  den faydalanılacak.  fonksiyonlar ezbere bilinecek bilgi değil.
Alıntı Yap.net kullanan , gerektiren uygulama projeye göre tercih edilir. fena birşey değildir bilen için kolaydır ve hızlıdır. program ebadı da az olur
Önceki mesajlarda da söylediğim gibi .Net fena bir şey değildir. Gerekirse  kullanılır.  Hatta bezen mecburidir. Mesela Windows CE için uygulama yazacaksanız, vstudio ile kolayca yazarsınız. amerikayı yeniden keşfetmeye çeşitli fonksiyonları elle yazmaya  gerek yok. ( ki bazısı da imkansızmış istesende yapamazmışsın)
İyice anlaşıldı  .Net >API

kayaaydin

vbasicmaster sitesi nasıl bir programlama sitesidir ki, kodla bazı şeyleri engellemek yerine direkt tarayıcıyı değiştir diyor? ilginç gerçekten