c# da delphi ile yazılan dll kullanma |
Yanıt Yaz |
Yazar | |
aziz.alkurt
Admin Group Kayıt Tarihi: 27.Ocak.2012 Bulundugu Yer: FETHİYE Online: Sitede Değil Gönderilenler: 26 |
Alıntı Cevapla
Konu: c# da delphi ile yazılan dll kullanma Gönderim Zamanı: 10.Subat.2012 Saat 19:10 |
Yazdığım fonksiyon saçma da olsa kullanımı göstermek için mükkemmel ölçüde
Delphi tarafı ------------------------------------------------------------------------------------------- library Project2; uses SysUtils,Classes; type TByteArr = array of byte; var MemStr:TMemoryStream; function prepareFile(zx:TByteArr; out k:integer):Pointer;export; stdcall; var b:byte; begin MemStr := TMemoryStream.Create; b:=$61; MemStr.Write(b,1); MemStr.Write(zx[0],length(zx)); k:=MemStr.size; Result:=MemStr.Memory; end; procedure DisposeMemStr();export; stdcall; begin FreeAndNil(MemStr); end; function isMemStrNULL():boolean;export; stdcall; begin if Assigned(MemStr) then Result:=false else Result:=true; end; exports prepareFile,DisposeMemStr,isMemStrNULL; begin end. ------------------------------------------------------------------------------------------- C# tarafı ------------------------------------------------------------------------------------------- [DllImport("d:/dlls/Project2.dll", EntryPoint = "prepareFile", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern IntPtr prepareFile(byte[] bytes,ref int l); [DllImport("d:/dlls/Project2.dll", EntryPoint = "DisposeMemStr", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern void DisposeMemStr(); [DllImport("d:/dlls/Project2.dll", EntryPoint = "isMemStrNULL", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern bool isMemStrNULL(); static void Main(string[] args) { byte[] bytes = File.ReadAllBytes("d:/denemeImp3.txt"); int l = 0; IntPtr b = prepareFile(bytes,ref l); byte[] bx = new byte[ l ]; Marshal.Copy(b, bx, 0,l); File.WriteAllBytes("d:/denemeImp2.txt",bx); bool x = isMemStrNULL(); DisposeMemStr(); x= isMemStrNULL(); } ------------------------------------------------------------------------------------------- delphiden aldığım memorystreamın başlagıç adresi (Pointer) ve uzunluğu. Bu ikisini bildiğim zaman zaten Marshall ile RAM dan onu okuyabiliyorum. Delphide MemStr nesnesini global yapmamın sebebi işlemim bittikten sonra memory den uçurmak için. Bu işlem sonrası istiyorsanız Marshall ile o adresde anlamlı data var mı diye bakabilirsiniz. ----------- Calling a Delphi DLL from C#, Use DLL compiled in Delphi 7 in C#
Düzenleyen murat turan - 15.Subat.2012 Saat 16:33 |
|
murat turan
Üye Profili
Özel Mesaj Yolla
Bu kullanıcıya ait mesajları bul
Üyenin Web Sitesie Git
Arkadaş Listeme Ekle
Admin Group Datakent Kayıt Tarihi: 01.Ekim.2003 Bulundugu Yer: Turkey Online: Sitede Değil Gönderilenler: 1798 |
Alıntı Cevapla Gönderim Zamanı: 15.Subat.2012 Saat 16:31 |
güzel çalışma
|
|
Yanıt Yaz |
Forum Atla | Forum İzinleri Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |