C++ ve Vb.net Apilerinin C# a Dönüşümü(P/I)

Yazar: Murat TANSUĞ
Kategori: Mobil Teknolojiler
Eklenme Tarihi: 25.9.2007 00:18:57



.Net Framework uygulamalarında PInvoke adı verdiğimiz servisimiz sayesinde managed uygulamalarda, unmanaged kütüphanelerinde bulunan fonksiyonları managed bir ortamdan çağırabilmekteyiz ...

İlk makalemden herkeze merhaba demenin mutluluğunu sizlerle paylaşmaktayım umarım bu makalemden maximum şekilde verim alırsınız.Sevgili dostum Sem Göksu’nun yeni paylaşım ortamının hayırlara vesile olması dileğiyle.

Günümüzde gerek multimedia gerek remote gerekse mobile uygulamalarda vazgeçilmezimiz haline gelen winapi kodlarının kullanımı ve diller arasındaki dönüşümüne değineceğim.

.Net Framework uygulamalarında PInvoke adı verdiğimiz servisimiz sayesinde managed uygulamalarda, unmanaged kütüphanelerinde bulunan fonksiyonları managed bir ortamdan çağırabilmekteyiz ve hatta platformlar arası tip dönüşümü gibi tüm işlemleri PInvoke servisi sayesinde gerçekleştirebilmekteyiz.Ayrıca değinmek istediğim birbaşka konu ise nasıl windowsda çekirdek işlemlerini kernel32.dll yönetiyorsa aynı şekilde mobil de ise çekirdek işlemlerini coredll.dll yönetmektedir kısacası bazı kısıtlamaları dahil etmez isek win32 de winapi kullanırken kernel32.dll den çağırdığımız fonksiyonların karşılıklarını mobile de coredll.dll karşılamaktadır.

Evet artık gelelim konumuza Unmanaged kütüphanelerin içerisindeki API fonksiyonlarını C# projelerimizde çağırıp kullanabilmek için “System.Runtime.InteropServices” namespace’ine ihtiyaç duymaktayız.

Örnek Kullanım:

using System.Runtime.InteropServices;

Makalemizin başından beri üstüne basa basa değindiğimiz *.dll konusuna açıklık getirelim farzedeliki projemize kernel32.dll import edeceğiz adındanda anlaşıldığı üzre DllImport attiribute u kullanarak hangi dll i import edeceğimizi belirtmeye yarar.

Örnek Kullanım:

[DllImport(“winmm”)] gibi..

Convert(Dönüşüm) Şemamız

.NET Sınıfı

Vb.Net

C#

C++

System.Byte

Byte

byte

char

System.SByte

-

Sbyte

signed char

System.Int16

Short

short

short

System.Int32

Integer

int

int veya long

System.Int64

Long

long

__int64

System.UInt16

-

ushort

unsigned short

System.UInt32

-

uint

unsigned int veya unsigned long

System.UInt64

-

ulong

unsigned __int64

System.Single

Single

float

float

System.Double

Double

double

double

System.Object

Object

object

Object*

System.Char

Char

char

__wchar_t

System.String

String

string

String*

System.Decimal

Decimal

decimal

Decimal

System.Boolean

Boolean

bool

bool

Evet yukarıdaki şemada diller arasındaki tip dönüşümlerine yer verilmiştir winapi fonksiyonlarında bulamadığımız dönüşüme mecbur kaldığımız durumlarda dönüşümleri bu şema yardımı ile hatasız kolayca yapmaktayız.

Örnek(c++ ve vb den C# a)

C++ code:

<DllImport("Winmm.dll")> _

Shared Function sndPlaySound(lpszSound As String, fuSound As Integer) As Integer

Vb code:

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long



C# code:

[DllImport(“winmm”)

Public static extern long SndPlaySound(string lpszSoundName,long uFlags)

gibi..

Şema kaynağı:

COM and .NET Interoperability

by Andrew Troelsen

ISBN:1590590112

Apress

Şu ana kadar yardım ve desteklerini hiçbir şekilde esirgemeyen her zaman yanımda olan.

Tayfun Tansuğ

Kubilay Kulaoğlu

Ali Burhan Gül

İlyas Bural

Halit Halic’e teşekkürlerimi iletmek isterim.

evet arkadaşlar bir makalenin daha sonuna geldik bir sonraki makalede görüşmek dileğiyle..

Murat TANSUĞ

Mail ve Msn:

Rescu3@gmail.com


Murat TANSUĞ

İlk Uygulamasını Delphi 2 de windows 3.1 e geliştiren Murat TANSUĞ şu sıralar dotnet teknolojisinde web tabanlı oyun projesiyle ilgileniyor.Aynı zamanda www.yazilimmakinesi.com asp.net ve mobile bölüm editörlüğü yapan yazarımız Mersin Üniv. Bilg. Tek. ve Prog. bölümünde okumakta.
Bu makaleye ilk yorum yapan siz olun.

Yorumunuz