![]()  | 
 
c# da delphi ile yazılan dll kullanma | 
 
    Yanıt Yaz   
   | 
  
| Yazar | |
   
   
   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: 1797  | 
  
   
        Alıntı   Cevapla
   
     Konu: c# da delphi ile yazılan dll kullanmaGönderim Zamanı: 15.Subat.2012 Saat 16:31  | 
 
| 
   
   
    
   
güzel çalışma
    
   
   
   | 
 |
![]()  | 
 |
   
   
   aziz.alkurt  
   
   Admin Group  
   Kayıt Tarihi: 27.Ocak.2012 Bulundugu Yer: FETHİYE Online: Sitede Değil Gönderilenler: 26  | 
  
   
        Alıntı   Cevapla
   
     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  | 
 |
![]()  | 
 |
    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  |