.NET VLC App içinden Delphi Win32 Dll'e class referans etme

Delphi .net ve .net ile ilgili konuları buraya yazabilirsiniz.
Cevapla
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

.NET VLC App içinden Delphi Win32 Dll'e class referans etme

Mesaj gönderen mero » 10 Ara 2012 12:16

Selamlar. Delphi.Net Vlc Application da yazdığım bir classı , Delphi Win32 Dll'de kullanmak üzere bir procedure içinde referans etmeye çalışıyorum ama bir türlü beceremedim. Hazırladığım Dll bir Win32 VLC application içerisinden çağırıp kullanabiliyorum ama aynı şekilde .Net Application'da kullanamıyorum.

Win32 DLL:

Kod: Tümünü seç

library
  WAFWeb;
uses
 .... 
 Main in 'Main.pas' {MainForm: TForm};

type
  TWafEvent = procedure(Sender: TObject) of object;
type
  tWAF_EVENTS = class(Tobject)
    Tag: integer;
    WafEvent: TWafEvent;
  end;

var
  MY_WAF_EVENTS: TWAF_EVENTS;

{$R *.res}
function WAF_INIT(EVENTS: TWAF_EVENTS): Integer; stdcall;
begin
  try   
    MY_WAF_EVENTS := EVENTS;
    MainForm.Button1.OnClick := MY_WAF_EVENTS.WafEvent;
    MainForm.Button1.Tag := MY_WAF_EVENTS.tag;
    Result := 5;  
  except
    Result := 0;
  end;
end;
exports
  WAF_INIT;
begin
end. 
Bu dll de bir sıkıntı olsa Win32 Applicationda kullanamazdım diye düşünüyorum.

Delphi .Net Application kodu:

Kod: Tümünü seç

unit UAnaForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls, System.Runtime.InteropServices;

type
  TWafEvent = procedure(Sender: TObject) of object;

type
  tWAF_EVENTS = class(Tobject)
    Tag: integer;
    WafEvent: TWafEvent;
  end;

var
  Main_WAF_EVENTS: tWAF_EVENTS;

type
  TAnaForm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject); 
    procedure FormCreate(Sender: TObject);	
  private
    { Private declarations }
  public
    procedure OnBtnBclick(sender: TObject);

  end;

[DllImport('WAFWeb.dll')]
  function WAF_INIT(EVENTS: tWAF_EVENTS): Integer; external; //stdcall; external 'WAFWeb.dll';

var
  AnaForm: TAnaForm;
  DllHandle: HWND;

implementation

{$R *.nfm}

procedure TAnaForm.Button1Click(Sender: TObject);
var
  i: integer;
begin
  i := WAF_INIT(Main_WAF_EVENTS);
  ShowMessage(IntToStr(i));
end;

procedure TAnaForm.OnBtnBclick(sender: TObject);
var
  sss: TStringList;
begin
  sss := TStringList.Create;
  sss.Add('Deneme');
  sss.SaveToFile('C:\sss.txt');
  sss.free;
end;

procedure TAnaForm.FormCreate(Sender: TObject);
begin
  //dlllier yükle
  DLLHandle := LoadLibrary('WAFWeb.dll');

  Main_WAF_EVENTS := tWAF_EVENTS.Create;
  Main_WAF_EVENTS.Tag := 20;
  Main_WAF_EVENTS.WafEvent := OnBtnBclick;
end;

end.
Dll deki procedureden result doğru geliyor. Application daki tWAF_EVENT classı DLL gitmiyor. Tag 0 gidiyor ve procedure de çalışmıyor. Neden.?

Cevapla