Ram üzerinden Delphi program ile C# program arasında veri iletişimi

Başlatan z, 15 Mayıs 2015, 02:23:38

z

Delphi'de dll yazayım ve verileri dll üzerinden C# programa atayım diyordum alternatif bir fikir olarak aklıma doğrudan mesajlaşma yoluyla veri aktarımı geldi.

Delphide yazacağım program Ram'da 4Mbyte gibi büyükçe bir dizin açsa.
C#'a bir şekilde bu dizinin adresini iletsem.

Bu dizin üzerinden veri haberleşmesi yapabilirmiyim?

C#'a açtığım dizin adresini nasıl bildiririm. Aklıma gelen en basit çözüm bir dosya açıp içine dizin adresini vermek. Daha güzel bir çözüm varmı?

Aklıma takılan bir diğer soru ise delphi program tarafından açılmış bir dizine C# programın okuma yazma yetkisi nasıl verilir?

Siz olsanız iki ayrı dilde yazılmış iki program arasında veri aktarımını nasıl yapardınız?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Bir zamanlar DDE kullanılıyordu. Halen kullanılıyor mu, windows DDE yerine geçen başka mekanizmalar getirdi mi bilmiyorum.
Bir de Pencereler arası mesajlaşma var.  PostMsg konusuna bir bakın. Ama bu ikisi de biraz karışık konular. En azından bana karışık geliyor.

Belki önerilmeyen bir yöntemdir. Ama Ben bu tip durumlarda UDP köprüsü kullanmayı tercih ediyorum.
UDP için Delphi'de komponent var zaten.  Protokolle uğraşmıyorsunuz.
Data geldiği zaman Read eventi tetikleniyor veriniz bir array içinde hazır.  göndermek istediğiniz zaman da Write(..) fonksiyonunu çağırıyorsunuz.

HID komponentinde yaptığınızdan farklı bir iş yapmıyorsunuz aslında. Neden karışık geldiğini anlayamadım.

İstediğim zaman IP adreslerini değiştirip ağ üzerindeki başka başka kaynaklardan gelene veriyi alabiliyor ya da başka aygıt ve bilgisayara veri gönderebiliyorum.
Böylece bir uygulamaya, sıkı kurallara bağlı kalmıyorum. İstersem aynı makine üzerinde istersem ağdaki başka bir makine ile bu şekilde haberleşiyorum.

z

Hocam UDP için verdiğim linte veri gönderilir ama gideceğinin garantisi yok diyor. Gittiğinden emin olmak istiyorsanız TCP kullanın diyor.

Bir de bu konular hakkında hiç bilgim yok. Projeyi bir an önce üstümden atmam lazım.

Mesajlaşma ile yapmaya karar verdim. Bir ara bir iki program yazmıştım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ahmets

Merhaba,
Eskiden bu tür işler için Mailslot veya Pipe kullanırdık. DDE daha çok Excel gibi programlar içindi, onun yerine de RTD geçti.

Bu tür işler için şimdilerde en popüler uygulama ZeroMQ gözüküyor. İlk fırsatta ben de kullanmayı öğreneceğim.
http://zeromq.org/
http://zguide.zeromq.org/page:all

0MQ Binding for Delphi
https://github.com/bvarga/delphizmq

Hello World client in Delphi
http://zguide.zeromq.org/dpr:hwclient

Hello World server in Delphi
http://zguide.zeromq.org/dpr:hwserver

fatih6761

Alıntı yapılan: z - 15 Mayıs 2015, 05:38:00
Hocam UDP için verdiğim linte veri gönderilir ama gideceğinin garantisi yok diyor. Gittiğinden emin olmak istiyorsanız TCP kullanın diyor.

Bir de bu konular hakkında hiç bilgim yok. Projeyi bir an önce üstümden atmam lazım.

Mesajlaşma ile yapmaya karar verdim. Bir ara bir iki program yazmıştım.
Hocam bildiğim kadarıyla garantisi yok sözü daha çok fiziki hatlarla taşınan veriyle ilgili. UDP veri paketini yolluyor gerisine karışmıyor. Gitti mi? diye bir sorgulama yapmıyor. Ancak aynı makine üzerindeyken fiziki bir hat yok, router vs. olmadığından iletmeme riski yok.
Bu UDP daha çok media streaming denen olayda kullanılıyor. Canlı yayını aktarırken bir frame karşıya ulaşmasa bile tekrar tekrar gönderilmiyor. O frame gitse de gitmese de yeni frame beklemeden yollanıyor. Bu yüzden garanti yok deniyor.
Bir tek sıkıntı karşı taraf veri geldiği anda işlemek zorunda. En azından yeni paket için yer açmalı. Eğer alıcı paketi işlemeden yeni paket gelirse bu paketi kaçırabilir.

peko

Alıntı YapDelphi'de dll yazayım ve verileri dll üzerinden C# programa atayım diyordum alternatif bir fikir olarak aklıma doğrudan mesajlaşma yoluyla veri aktarımı geldi.

Hocam,
Tüm platformlarda çalışacak, kuruldu kurulmadı oldu olmadı yetkisi var yok onda çalışıyor bunda çalışmıyor vs gibi bir milyon sorunla uğraşmamak adına iletişim yolunu kesinlikle değiştirmenizi tavsiye ederim.
O verileri xml içerisine encrypt olarak yazıp user'ın yetkili root'una yazın, ordan da istediğiniz yerden okuyup işleyin. Yolunuza devam edin..

Diğer tüm çözümler saçınızı başınızı yolduracak, bugün olmasa yarın.
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "