1
EXE RANK
Mustafa Yılmaz
Fexe Kullanıcısı
Puanları
0
Çözümler
0
- Katılım
- 29 Eyl 2012
- Mesajlar
- 1,022
- Tepkime puanı
- 0
- Puanları
- 0
- Web sitesi
- netbilgini.com
Visual Studioda C++ bölümünde web uygulamalarına dair sadece web servisi gözükmesine rağmen ASP.NET sayfalarının kalıtımsallık özelliğini kullanarak C++ ile yarattığımız MSIL kütüphaneleri ile web uygulamaları geliştirebiliriz.
ASP.NET çalışma prensiplerinin detayını ASP.NET bölümünden edinebilirsiniz fakat bu yazı boyunca bilmemiz gerekenşey yazdığımız aspx dosyalarının kalıtımdan etkilenme özelliklerinin bulunmasıdır. Buda bizim herhan gibi .net dilinde geliştirdiğimiz kütüphanenin web arayüzündede kullanılabileceğini göstermektedir. Peki aspx dosyaları nasıl kalıtım "Inheritance" edinirler. <%@ Page AutoEventWireup="true" Inherits="Namespace.Class" %> Aspx uygulamalarını çalıştıran iis tarafından tetiklenen asp_wp.exe dosyayı ilkkez okudukdan sonra Inherits anahtarında belirtilen ilgili sınıfı aynı klasör içerisinde /bin dizinin altında arar. Ardından ilgili Assembly dosyasını hafızaya yükler ve sayfada bir işlem gerçekleştirdiğinde "PostBack" ilgili kütüphanedeki methodlar çağrılır. Burda birde AutoEventWireup anahtarını görüyoruz bu da ilgili kütüphaneden Init ve Page_Load gibi evvelden tanımlı bizim üzerine yazdığımız methodların ayıklanması gerekiği veya gerekmediğini belirtmektedir. True olarak tanımlanırsa tanımlı methodlar ayıklanmaz. Şimdi örnek bir Aspx dosyası ile bunun için bir C++ kütüphanesi hazırlayacaz. Burda önemli olan konu şudur ki aspx içinde tanımladığınız tüm kontrollerin bir karşılığıda kütüphane içerisinde olmalıdır. Örnek Aspx dosyası: DataGridSortPaging.aspx
<%@ Page AutoEventWireup="true" Inherits="CPlusWeb.DataGridSortPaging" %>
<HTML>
<HEAD>
<title>DataGridSortPaging</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C++">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp
ataGrid id="DataGrid1" runat="server"
AllowPaging="True" PageSize="10" OnPageIndexChanged="Grid_Change"
AllowSorting="True" OnSortCommand="Sort_Grid"
GridLines="Horizontal" Font-Size="Smaller" Font-Names="Tahoma"></asp
ataGrid>
</form>
</body>
</HTML>
Yukarda Grid Web Kontrolü içerisinde kontrol ile ilgili parametreler görüyorsunuz. Bu konuyu ASP.NET bölümünde daha ayrıntılı inceleyebilirsiniz. Fakat bilmeniz gereken Paging ile sayfaları bu örnekte 10ar olmaz üzere bölebileceğiniz ve de Sorting ile datalarınızı sıraya koyabileceğiniz. Bu işlemler için Grid_Change gibi EventHandler lar belirlemeliyiz ve bunları .dll içinde tanımlamış olmalıyız.Yarattığımız dosyamızı IIS rootuna atabiliriz. Eğer değiştirmediyseniz bu [U][COLOR=#434343]C:\inetpub\wwwroot\[/COLOR][/U] olacaktır. Şimdi aynı klasörde yoksa birde \bin klasörü açalım yani .dll imiz kopyalacağımız [U][COLOR=#434343]C:\inetpub\wwwroot\bin\[/COLOR][/U] Şimdi Oluşturduğumuz DataGridi dolduracak CodeBehindı yazmamız gerekli. Gerçi biz tam anlamıyla CodeBehind kavramını kullanıyor olmayacağız çünki CLR içinde bulununan yorumlayıcı bildiğiniz üzere sadece VB, J# ve C# dillerini destekliyor. Bu yüzden aspx dosyası içerisinde de C++ kullanmamız da mümkün olmayacak. Sıra geldi gerekli kütüphaneyi oluşturmaya. Bunun için Yeni Bir C++.NET Kütüphanesi Projesi başlatmalıyız.
Projemize referans olarak System.Web ve System.XML kütüphanelerini eklemeliyiz. Ardından otomatik oluşan ve içine programımızı yazacağımız CPlusWeb.h dosyasını açıp içini aşağıdaki gibi düzenleyiniz.
// CPlusWeb.h
#pragma once
using namespace System;
using namespace System:
ata;
using namespace System:
ata::SqlClient;
using namespace System::Web;
using namespace System::Web::SessionState;
using namespace System::Web::UI;
using namespace System::Web::UI::WebControls;
using namespace System::Web::UI::HtmlControls;
namespace CPlusWeb
{
public __gc class DataGridSortPaging : public System::Web::UI:
age // Page özelliklerini alıyoruz
{
protected:
System::Web::UI::WebControls:
ataGrid* DataGrid1; // aspx dosyasındaki kontrolümüz
DataView* myDataView; // diğer method lardan erişmek için DataViewu sınıf içinde tanımlarız
private:
void Page_Load(Object* sender, EventArgs* e)
{
if(!IsPostBack){
SqlConnection* myConnection;
SqlCommand* myCommand;
SqlDataAdapter* myDataAdapter;
DataSet* myDataSet;
myConnection = new SqlConnection("server=(local);integrated security=sspi;database=Northwind");
myCommand = new SqlCommand("SELECT * FROM Customers",myConnection);
myDataAdapter = new SqlDataAdapter(myCommand);
myDataSet = new DataSet("Order Details");
myDataAdapter->Fill(myDataSet);
myDataView = new DataView(myDataSet->Tables->Item[0]); // DataView Sorting ve Paging özelliğini kullanmak için gerekli bir arayüzdür.
Session->Add("myDataView", myDataView); // Değişken sonraki çağrılara session içinden cevap vericektir.
}
else
{
myDataView = dynamic_cast<DataView*>(Session->get_Item("myDataView")); // Session değişkenleri object olarak tutar bu yüzden tipini explicit olarak belirtmemiz gerekir
}
this->DataGrid1->DataSource = myDataView;
this->DataGrid1->DataBind(); // Windows forms da binding yapmanıza gerk yoktur fakat ASP.NET kontrollerinde data değiştirildikten sonra bind edilmelidir.
}
public:
void Sort_Grid(Object* sender, DataGridSortCommandEventArgs* e)
{
// aspx dosyasının içinde belirtilen sort işlemini gerçekleştirecek method
this->myDataView->Sort = e->SortExpression->ToString();
this->DataGrid1->DataBind();
}
void Grid_Change(Object* sender, DataGridPageChangedEventArgs* e)
{
// aspx dosyasının içinde belirtilen paging işlemini gerçekleştirecek method
this->DataGrid1->CurrentPageIndex = e->NewPageIndex;
this->DataGrid1->DataBind();
}
};
}
DataGridin Paging ve Sorting özelliklerini kullanırken dikkat ettiğimiz şey şu. Sayfa sadece ilk çağırışdığında veritabanı ile etkileşime giriyor. Bunu IsPostBack değişikeni ile anlayabiliyoruz ve değişkenimizi Session değişkenin içine atıyoruz eğer sayfa tekrar geri gelirse bu sefer session dan çektiğimiz değişkenin üzerinde işlem yapıyoruz. Bu şekilde defalarca veritabanına bağlanmak zorunda kalmıyoruz ve işlemlerimiz hızlanıyor.
Visual Studioda kütüphanemizi artık derleyebiliriz. Derleme sonunda bir dialog çıkacak bu kütüphanenizi test etmek için bir exe seçmenizi tavsiye eder. Fakat bunu yapmak zorunda değilsiniz Cancel ile geçebilirsiniz. Artık Projenizi yarattığınız klasörün içinden Release dizininden CPlusWeb.dll i C:\inetpub\wwwroot\bin\ altına kopyalayabilirsiniz. Eğer Debug modunda derlediyseniz Debug dizininden de ilgili dosyayı ISS rootuna kopyalayabilirsiniz.
[U][COLOR=#434343]http://localhost/DataGridSortPaging.aspx[/COLOR][/U] i çalıştırdığınızda karşınıza aşağıdaki gibi bir tablo gelecektir.
Bu yazıda ne yaptığımızı özetlemek gerekirse bir C++.NET kütüphanesi yarattık ve bundan türeyen bir aspx sayfası tasarladık. Burda ASP.NET kontrollerinden datagridin Paging ve Sorting özellerinden faydalanarak basit bir uygulama geliştirdik.
ps: Visual Studio olmadan da bu işlemleri gerçekleştirebilirsiniz. Bunun için VC++ 2003 SDK yı kurmalısınız içindeki CL.exe ve Link.exe ile .cpp doysanızdan DLL oluşturabilirsiniz. Ayrıntılı bilgi için önce yazıları inceleyebilirsiniz.
Yazar : Sadun Sevingen
Makale:
Microsoft Visual C++ .Net ve ASP.NET Uygulamaları C++ ve C++.NET dili Sadun Sevingen Kaynak : csharpnedir.com
ASP.NET çalışma prensiplerinin detayını ASP.NET bölümünden edinebilirsiniz fakat bu yazı boyunca bilmemiz gerekenşey yazdığımız aspx dosyalarının kalıtımdan etkilenme özelliklerinin bulunmasıdır. Buda bizim herhan gibi .net dilinde geliştirdiğimiz kütüphanenin web arayüzündede kullanılabileceğini göstermektedir. Peki aspx dosyaları nasıl kalıtım "Inheritance" edinirler. <%@ Page AutoEventWireup="true" Inherits="Namespace.Class" %> Aspx uygulamalarını çalıştıran iis tarafından tetiklenen asp_wp.exe dosyayı ilkkez okudukdan sonra Inherits anahtarında belirtilen ilgili sınıfı aynı klasör içerisinde /bin dizinin altında arar. Ardından ilgili Assembly dosyasını hafızaya yükler ve sayfada bir işlem gerçekleştirdiğinde "PostBack" ilgili kütüphanedeki methodlar çağrılır. Burda birde AutoEventWireup anahtarını görüyoruz bu da ilgili kütüphaneden Init ve Page_Load gibi evvelden tanımlı bizim üzerine yazdığımız methodların ayıklanması gerekiği veya gerekmediğini belirtmektedir. True olarak tanımlanırsa tanımlı methodlar ayıklanmaz. Şimdi örnek bir Aspx dosyası ile bunun için bir C++ kütüphanesi hazırlayacaz. Burda önemli olan konu şudur ki aspx içinde tanımladığınız tüm kontrollerin bir karşılığıda kütüphane içerisinde olmalıdır. Örnek Aspx dosyası: DataGridSortPaging.aspx
<%@ Page AutoEventWireup="true" Inherits="CPlusWeb.DataGridSortPaging" %>
<HTML>
<HEAD>
<title>DataGridSortPaging</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C++">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp

AllowPaging="True" PageSize="10" OnPageIndexChanged="Grid_Change"
AllowSorting="True" OnSortCommand="Sort_Grid"
GridLines="Horizontal" Font-Size="Smaller" Font-Names="Tahoma"></asp

</form>
</body>
</HTML>
Yukarda Grid Web Kontrolü içerisinde kontrol ile ilgili parametreler görüyorsunuz. Bu konuyu ASP.NET bölümünde daha ayrıntılı inceleyebilirsiniz. Fakat bilmeniz gereken Paging ile sayfaları bu örnekte 10ar olmaz üzere bölebileceğiniz ve de Sorting ile datalarınızı sıraya koyabileceğiniz. Bu işlemler için Grid_Change gibi EventHandler lar belirlemeliyiz ve bunları .dll içinde tanımlamış olmalıyız.Yarattığımız dosyamızı IIS rootuna atabiliriz. Eğer değiştirmediyseniz bu [U][COLOR=#434343]C:\inetpub\wwwroot\[/COLOR][/U] olacaktır. Şimdi aynı klasörde yoksa birde \bin klasörü açalım yani .dll imiz kopyalacağımız [U][COLOR=#434343]C:\inetpub\wwwroot\bin\[/COLOR][/U] Şimdi Oluşturduğumuz DataGridi dolduracak CodeBehindı yazmamız gerekli. Gerçi biz tam anlamıyla CodeBehind kavramını kullanıyor olmayacağız çünki CLR içinde bulununan yorumlayıcı bildiğiniz üzere sadece VB, J# ve C# dillerini destekliyor. Bu yüzden aspx dosyası içerisinde de C++ kullanmamız da mümkün olmayacak. Sıra geldi gerekli kütüphaneyi oluşturmaya. Bunun için Yeni Bir C++.NET Kütüphanesi Projesi başlatmalıyız.
// CPlusWeb.h
#pragma once
using namespace System;
using namespace System:

using namespace System:

using namespace System::Web;
using namespace System::Web::SessionState;
using namespace System::Web::UI;
using namespace System::Web::UI::WebControls;
using namespace System::Web::UI::HtmlControls;
namespace CPlusWeb
{
public __gc class DataGridSortPaging : public System::Web::UI:

{
protected:
System::Web::UI::WebControls:

DataView* myDataView; // diğer method lardan erişmek için DataViewu sınıf içinde tanımlarız
private:
void Page_Load(Object* sender, EventArgs* e)
{
if(!IsPostBack){
SqlConnection* myConnection;
SqlCommand* myCommand;
SqlDataAdapter* myDataAdapter;
DataSet* myDataSet;
myConnection = new SqlConnection("server=(local);integrated security=sspi;database=Northwind");
myCommand = new SqlCommand("SELECT * FROM Customers",myConnection);
myDataAdapter = new SqlDataAdapter(myCommand);
myDataSet = new DataSet("Order Details");
myDataAdapter->Fill(myDataSet);
myDataView = new DataView(myDataSet->Tables->Item[0]); // DataView Sorting ve Paging özelliğini kullanmak için gerekli bir arayüzdür.
Session->Add("myDataView", myDataView); // Değişken sonraki çağrılara session içinden cevap vericektir.
}
else
{
myDataView = dynamic_cast<DataView*>(Session->get_Item("myDataView")); // Session değişkenleri object olarak tutar bu yüzden tipini explicit olarak belirtmemiz gerekir
}
this->DataGrid1->DataSource = myDataView;
this->DataGrid1->DataBind(); // Windows forms da binding yapmanıza gerk yoktur fakat ASP.NET kontrollerinde data değiştirildikten sonra bind edilmelidir.
}
public:
void Sort_Grid(Object* sender, DataGridSortCommandEventArgs* e)
{
// aspx dosyasının içinde belirtilen sort işlemini gerçekleştirecek method
this->myDataView->Sort = e->SortExpression->ToString();
this->DataGrid1->DataBind();
}
void Grid_Change(Object* sender, DataGridPageChangedEventArgs* e)
{
// aspx dosyasının içinde belirtilen paging işlemini gerçekleştirecek method
this->DataGrid1->CurrentPageIndex = e->NewPageIndex;
this->DataGrid1->DataBind();
}
};
}
DataGridin Paging ve Sorting özelliklerini kullanırken dikkat ettiğimiz şey şu. Sayfa sadece ilk çağırışdığında veritabanı ile etkileşime giriyor. Bunu IsPostBack değişikeni ile anlayabiliyoruz ve değişkenimizi Session değişkenin içine atıyoruz eğer sayfa tekrar geri gelirse bu sefer session dan çektiğimiz değişkenin üzerinde işlem yapıyoruz. Bu şekilde defalarca veritabanına bağlanmak zorunda kalmıyoruz ve işlemlerimiz hızlanıyor.
Visual Studioda kütüphanemizi artık derleyebiliriz. Derleme sonunda bir dialog çıkacak bu kütüphanenizi test etmek için bir exe seçmenizi tavsiye eder. Fakat bunu yapmak zorunda değilsiniz Cancel ile geçebilirsiniz. Artık Projenizi yarattığınız klasörün içinden Release dizininden CPlusWeb.dll i C:\inetpub\wwwroot\bin\ altına kopyalayabilirsiniz. Eğer Debug modunda derlediyseniz Debug dizininden de ilgili dosyayı ISS rootuna kopyalayabilirsiniz.
[U][COLOR=#434343]http://localhost/DataGridSortPaging.aspx[/COLOR][/U] i çalıştırdığınızda karşınıza aşağıdaki gibi bir tablo gelecektir.
Bu yazıda ne yaptığımızı özetlemek gerekirse bir C++.NET kütüphanesi yarattık ve bundan türeyen bir aspx sayfası tasarladık. Burda ASP.NET kontrollerinden datagridin Paging ve Sorting özellerinden faydalanarak basit bir uygulama geliştirdik.
ps: Visual Studio olmadan da bu işlemleri gerçekleştirebilirsiniz. Bunun için VC++ 2003 SDK yı kurmalısınız içindeki CL.exe ve Link.exe ile .cpp doysanızdan DLL oluşturabilirsiniz. Ayrıntılı bilgi için önce yazıları inceleyebilirsiniz.
Yazar : Sadun Sevingen
Makale:
Microsoft Visual C++ .Net ve ASP.NET Uygulamaları C++ ve C++.NET dili Sadun Sevingen Kaynak : csharpnedir.com