Form üzerinde komponent barındıran uygulama dll yapılabilirmi?

Başlatan z, 14 Mayıs 2015, 19:29:36

z

Arkadaşlar bir projeyi C# ile yazdılar. USB işini benim üstüme yıkmak üzereler. C# bilmiyorum. 

Delphi'de USB komponenti form üzerine koyup biraz kod yazmam yetiyor.

Daha önce dll'ler yazmıştım. Fakat Form üzerinde komponent barındıran bir uygulama dll yapılabilirmi hiç bilgim yok.

Eğer bu şekilde bir programı Dll haline getirebilirsem herkes mutlu olacak.

1) Yapılabilir mi?

2) Delphi program bir şekilde C# ile yazılmış ana program tarafından çalıştırılabilir. Fakat programım çalıştığında formu ne kadar küçük yaparsam yapayım ortalıkta minik te olsa bir formun görünmesi hoş değil. Form tamamen görünmez yapılabilirmi?




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Icarus

Abi şöyle anladım doğru mu ?
Bir dll yazayım, C#'da program yazan adam da Form'un üzerinine bir component gibi bunu ekleyebilsin, ara yüz oluşturabilsin ?
Evet yapmak mümkün

z

Bu bahsettiğin daha da güzel olur. Olabiliyorsa bunu yapayım.

Ben daha faklı bir şey demiştim.

Delphide foruma sahip ve klasik exe program hazırlar gibi kodlarımı yazacağım. Ama bunu exe değil dll yapmak istiyorum.

Yada siz boş verin benim dediğimi olay şu;

Usb cihaz var. Ben delphi ile bunla sıkıntısız konuşabiliyorum. C# ile program yazan arkadaşların işleri başından aşkın ve bu kısmı dll yoluyla benim çözmemi istiyorlar.

Bu işi nasıl yaparım. Burada kafamı karıştıran tek konu Delphideki komponenti form üstüne yapıştırıp kod yazıyordum. Bu dll'e dönüştürülürmü bilmiyorum. Çünkü daha önce hazırladığım dll'lerin içinde sadece hesap kitap yapan fonksiyonlar vardı.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Icarus

Evet abi dönüşür. Ama kötü olur tabii fakat mümkün.
Delphi'nin detaylarını hatırlamıyorum ama normal dll'ni yap. Form'un yaratılışını dll'den export yaptığın bir fonksiyon yapsın.  Form hidden olsun.
C#'dakiler önce Form'u yaratan dll'nin fonksiyonunu çağırsın, ardındanda senin istediğin diğer şeyleri...

Ama detaylar nasıl ? Delphi'de nasıl Import table yaratılıyor ? bunları açıkcası hatırlamıyorum

engerex

 Boş bir DLL projesi oluştur. Ardından boş VCL Form oluştur. Soracak: VCL aktifleştireyim mi?
Daha sonra kendi forumda da kullanabilirler.
Gerisi aynı zaten.

z

Zamanı olan varsa basit bir örnek paylaşabilir mi?

Forum üzerinde bir buton olsun. Buton tıklandığında global bir değişkenin değeri 1 artsın.
Ama bu bahsettiğim, exe değil dll olsun.

Bir tane de fonksiyon export edilsin. Bu fonksiyonu çağırdığımda bu global değişkeni döndürsün.

Daha sonra bir başka program yazarım ve hazırlanan bu dllde bu export edilmiş fonksiyonu çağırıp global değişkenin değerini okur ve "text box"a yazarım.



mesaj birleştirme:: 14 Mayıs 2015, 20:57:25

Alıntı yapılan: engerex - 14 Mayıs 2015, 20:06:59
Boş bir DLL projesi oluştur. Ardından boş VCL Form oluştur. Soracak: VCL aktifleştireyim mi?
Daha sonra kendi forumda da kullanabilirler.
Gerisi aynı zaten.

Hocam Delphiyi  deneye yanıla işimi görecek kadar öğrendim.

VCL falan diyince ben bir şey anlamıyorum çünkü ezbere yapıyorum.

Delphiyi açtım New dediğim zaman karşıma

Application, Clx application, Data module, Form, Frame, Unit ve other geliyor.
Ben Application seçip dalıyorum ve başlıyorum kod yazmaya.

Bu VCL nedir şimdi?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Yuunus


engerex

Boş DLL projesi oluşturmak için : File > New > Other > DLL Wizard...
Mevcut projeye Form eklemek için : File > New > Form...

VCL : Visual Component Library

z

Yok onları biliyorum VCL form açmayı sordum. VCL form bildiğimiz form mu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

 Aynen bildiğimiz form. Dilersen sonradan DLL içinden de Form Buton vs. oluştuabilirsin.

z

Aşağıdaki kodlar DLL projemin içinde.

library Bulent;
uses
  SysUtils,
  Classes,
  dLL in 'dLL.pas' {Form1};

{$R *.res}

function Get_A():integer; stdcall;
begin
      result:=form1.A;
end;

exports Get_A;

begin
end.


Aşağıdaki kodlar da DLL projemdeki forma ait.

unit dLL;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    A:integer;     { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
       A:=A+1;
end;

end.



Aşağıdaki proje ise dll'i kullanmak için yazdığım proje
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Get_A():Integer; stdcall ; external 'Bulent.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
        form1.Caption:=IntToStr(Get_A());
end;

end.


Ben hâlâ dll içindeki form nasıl çalışacak onu anlamadım.
Zaten butona basıp Get_A() fonksiyonu çağrıldığında aşağıdaki hatayı veriyor.

Access violating at address 003CCB3F in module 'Bulent.dll'. Read of address 000002F4.

DLL fonksiyonu formdaki A değişkenini okumak istediğinde oluyor bu hata.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Yuunus

http://www.megafileupload.com/1VKu/dddddd.rar
bunu bi deneyin child butona basinca ana formdaki edit 1 artiyon
main exe yi calistirin

Klein

Hocam böyle bir uygulama yapmak yerine başka bir yöntem önersem!
Siz USB'den gelen veriyi UDP'ye bassanız, UDP'den gelen veriyi de USB'ye.
Böylece LokalHost üzerinden haberleşirsiniz. Bir çeşit USB-UDP Gateway.
c# ile UDP kısmını rahat yazarlar.

z

@Klein

Astronot gibi konuşuyorsun. Ben ne anlarım udp den. Udp de nedir?

@Digiman

Sağolasın hocam. Sanırım eksiğimi anladım.

mesaj birleştirme:: 15 Mayıs 2015, 01:43:16

Udp hiç bilmediğim bir şey.

http://tr.wikipedia.org/wiki/UDP

Zaten özellikleri de ihtiyaçlarımızla uyuşmuyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

z hocam delphi ile Activex nesne yapmalisiniz. c#, cpp, delphi visual basic  vs windows uygulamalarında kullanılır. çeşitli geliştiriciler bunu rahat kullanır. zaten activex nesne bir DLL içinde oluyor. veya ocx.

activex nesne aynen uygulama gibidir.  resmen başka uygulamanın içinde çalışan sizin uygulama oluyor
internet explorer içinde bile kullanabiliyoruz.
uygulama niyetine bir web sayfa açılıyor içinde activex nesne var. sizin usb cihazla ilgili işler yapılıyor.