Datakent Ana Sayfa
Anasayfa Anasayfa > Diğer bölümler > C# & ASP.NET
  Aktif Konular Aktif Konular RSS: c# da delphi ile yazılan dll kullanma
  Yardım Yardım  Hızlı Ara   Kayıt Ol Kayıt Ol  Giriş Giriş

c# da delphi ile yazılan dll kullanma

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
aziz.alkurt Açılır Menü Göster
Admin Group
Admin Group
Simge

Kayıt Tarihi: 27.Ocak.2012
Bulundugu Yer: TRABZON
Online: Sitede Değil
Gönderilenler: 26
  Alıntı aziz.alkurt Alıntı  Yanıt YazCevapla Mesajın Direkt Linki 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
Yukarı Dön
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1764
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 15.Subat.2012 Saat 16:31
güzel çalışma
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Menü Göster



Bu Sayfa 0,109 Saniyede Yüklendi. [power by : WebWiz]