Strings Delphi

{www.freemine.com.tr.tc}
DLL (Dynamic Link Library), başlı başına program parçacıkları olup,
programlarımızda kullandığımız rutinleri bize ulaştırırlar. Hazır fonksyonları
bize yani programlarımıza export ederler. Bu durumda DLL kullanmak için bizim de
programımıza import etmemiz gerekir. DLL’lerin kullanımı, rutinlerinin pek
açıklayıcı içeriğe sahip olmamasından dolayı bir miktar zordur. Ayrıca
programımıza import ettiğimiz bir DLL farklı bir versiyon içermesi durumunda
programın çökmesine sebep olabilir. Program aradığı rutinleri bulamaması
durumunda hata verecek veya farklı işlemlerle amaç dışına çıkacaktır.
The Component Object Model (COM), bu tür durumlar için arı özellikler içeriyor.
Ancak teknolojisinin DLL teknolojisi üzerine kurulu olduğu düşünülürse, tam
çözüm verdiği düşünülemez.
.Net Assembly, DLL teknolojisinde yeni bir yaklaşım olarak yerini alıyor.
Sıralı rutinlerin yerine “class” mantığı kullanılıyor. “class” ların her biri
detaylı anlatımlar içeriyor. Taglar arasında kolaylıkla gezinip bilgi
alınabiliyor. Bir yenilik de eklediğimiz rutinler için kullandığımız headerlar
tarih oluyor. Kısacası import etmemiz gereken kod parçalarına gerek kalmıyor.
.Net teknolojisi getirdiği yenilikler ile eskiyi de ihmal etmiyor.
Şimdi Win32 için ve .Net için DLL geliştirip kullanalım ve karşılaştıralım:
MyDLL:
Win32 için bir DLL yazalım ve kullanalım,
library MyDLL;
function TheAnswer: Integer; stdcall; export;
begin
Result := 42
end;
exports
TheAnswer;
begin
end.
UseDLL :
Yazdığımız DLL dosyasını import ederek sayfamıza katmamız gerekir.
Bunu da “external” komutu ile yapınız.
program UseDLL;
{$APPTYPE CONSOLE}
function TheAnswer: Integer; external 'MyDLL.dll';
begin
writeln('The Answer is: ', TheAnswer)
end.
MyASM :
Gördüğümüz gibi class oluşturulup rutinler bu clasın altında tanımlanıyor.
Ayrıca dikkat ederseniz class tanımlamasında “T” harfi kullanılmamış.
Yıllarca Delphi kullanıcılarının sembolü haline gelen prefiximiz tarih oluyor gibi.
Bunun yanında belirtmek gerekiyor ki. .Net teknolojisinde
söz sahibi olmak istiyorsanız C# ile aranızı iyi tutmaya bakın.
library MyASM;
type
LifeTheUniverseAndEverything = class
constructor Create;
function TheAnswer: Integer;
end;
constructor LifeTheUniverseAndEverything.Create;
begin
end;
function LifeTheUniverseAndEverything.TheAnswer: Integer;
begin
Result := 42
end;
end.
UseASM :
Dikkat ettiyseniz MyASM dosyası unit olarak çağırılıyor.
.Net teknoojisinin güçlü bir özelliğini görüyoruz. Oluşturduğumuz
dosya farklı meta datalar içerebilir. Bu ne demek? Kısaca şöyle
açıklayabiliriz. Oluşturduğumuz unit farklı, farklı
.Net dillerinde de kullanılabilir. Örneğin C# gibi...
program UseASM;
{$APPTYPE CONSOLE}
uses
MyASM;
var
X: LifeTheUniverseAndEverything;
begin
X := LifeTheUniverseAndEverything.Create;
writeln('The Answer is: ', X.TheAnswer)
end.
.Net İçinde DLL Kullanımı :
Programımızda hazır bir rutin kullanmak istedik. Örneğin bu rutin
MyDLL.dll dosyasında bulunsun. Şimdi .Net için yazacağımız
kodu görelim :
program UseDLLdotNet;
{$APPTYPE CONSOLE}
uses
System.Runtime.InteropServices;
function TheAnswer: Integer; stdcall; external 'MyDLL.dll';
begin
writeln('The Answer is: ', TheAnswer)
end.
Tabiki Win32 için hazırlanmış, DLL dosyasının sistemin yapısına
zarar vermemesi düşünülemez. Bunu engellemek için
“DLLImport” özelliğini kullanabilirsiniz.
program UseDLLdotNet;
{$APPTYPE CONSOLE}
uses
System.Runtime.InteropServices;
[DllImport('MyDLL.dll')]
function TheAnswer: Integer; external;
begin
writeln('The Answer is: ', TheAnswer)
end.
Ein 32’den kalma DLL’ ler kullanmamızın güvenilir yolunu oluşturuyor.
“Delphi for .Net” de “Borland.Win32.Windows.Pas” unitini kullanarak,
eski Win32 Api’lerini import edip kullanıyor.