İ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