Arsip: tanya tentang dll

 
user image
more 16 years ago

hendra_sir84

halo semua, saya lagi bermasalah dengan DLL (library). Masalahnya bagaimana caranya berkomunikasi antara satu DLL dengan DLL yang lain? misalnya ada DLL "A" yang menggunakan form dimana dalam form tersebut terdapat komponen Edit1 dan Button1. Ketika menekan Button1 akan memanggil DLL "B" yang isinya juga berupa form. Dalam form tersebut terdapat Edit2 dan Button2. Ketika user memasukkan text kedalam Edit2 dan menekan Button2 maka DLL "B" akan di free kan dan text tersebut masuk ke Edit1 pada Form didalam DLL "A". caranya kedua DLL itu saling bertukar informasi bagaimana ya? Tolongin dong para delphi mania. :(
user image
more 16 years ago

yusdi

coba konekin unitnya

...
implementation
uses U_splash,U_informasi_inventory,U_kelompok_barang,
     U_supplier,U_search,U_administrasi_user,U_about,U_ubah_password,
     U_transaksi_penjualan,U_laporan,U_histori,U_fastmoving,U_input_barang;
{$R *.dfm}
...
trus akses aja

form1.edit2.text:=edit2.text;
edit2.clear;
mudah2an benar
user image
more 16 years ago

yusdi

ralat dikit. nama unit disesuaikan dengan nama unit yg ada
user image
more 16 years ago

DelphiExpert

@yusdi: wee... dalam DLL lho mas... ayo dijawab yang benar :D
user image
more 16 years ago

yusdi

wah salah ya....hehehehe maaf....
user image
more 16 years ago

ivan_delphi7

bro @hendra_sir84, mudah-mudahan cara berikut berguna buat anda... Pada DLL "A" (dalam hal ini saya menggunakan Application bukan DLL, karena yang difokuskan khan pada syntax Button1-nya) syntax-nya sbb :

procedure TForm_Main_App.Button1Click(Sender: TObject);
var Hand: THandle;
    Call: function(AppHandle: THandle): PChar; stdcall;   {Deklarasi function pada DLL}
begin
  try
    Hand:=LoadLibrary(PChar(ExtractFilePath(Application.ExeName) + 'ProjectDLL.dll'));
                                               {Path File DLL-nya, sesuaikan dengan keadaan}
    if Hand = 0 then
      Application.MessageBox(PChar('File "' + ExtractFilePath(Application.ExeName) + 'ProjectDLL.dll' + '" not found!'),
      'Error',MB_OK or MB_ICONERROR)
    else
      begin
        @Call:=GetProcAddress(Hand,PChar('CallForm'));
        Edit1.Text:=Call(Application.Handle);
      end;
  finally
    FreeLibrary(Hand);
  end;
end;
Dan pada DLL "B" (kali ini menggunakan Project DLL) ; 1. Syntax-nya pada Project-nya sbb :

library ProjectDLL;
uses
  SysUtils, Classes, Forms,
  UnitDLL in 'UnitDLL.pas' {Form_in_DLL};
var
  OldAppHandle: THandle; 
function CallForm(AppHandle: THandle): PChar; stdcall;
begin
  OldAppHandle:=Application.Handle;
  Application.Handle:=AppHandle; 
  Application.CreateForm(TForm_in_DLL, Form_in_DLL);
  with Form_in_DLL do
    begin
      ShowModal;
      Free;
    end;
  Result:=varCallResult;
  Application.Handle:=OldAppHandle;
end;
exports
  CallForm name 'CallForm';
{$R .res}
begin
end.
2. Syntax pada Form-nya sbb :

unit UnitDLL;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm_in_DLL = class(TForm)
    Button2: TButton;
    Edit2: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form_in_DLL: TForm_in_DLL; 
  varCallResult: PChar;
implementation
{$R  .dfm}
procedure TForm_in_DLL.Button2Click(Sender: TObject);
begin
varCallResult:=PChar(Edit2.Text);
Close;
end;
procedure TForm_in_DLL.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
Action:=caFree
end;
end.
Selanjutnya, dikembangin sendiri ya... :)
user image
more 16 years ago

hendra_sir84

gak bisa "ivan_delphi7", malah muncul pesan error access memory. Tolong dong gimana caranya Applikasi induk membaca data text di component TEdit di DLL "B" ?
user image
more 16 years ago

hendra_sir84

gak bisa "ivan_delphi7", malah muncul pesan error access memory. Tolong dong gimana caranya Applikasi induk membaca data text di component TEdit di DLL "B" ?
user image
more 16 years ago

DelphiExpert

seperti @ivan_delphi7 bilang:
Selanjutnya, dikembangin sendiri ya...
:mrgreen:
user image
more 16 years ago

ivan_delphi7

gak bisa "ivan_delphi7", malah muncul pesan error access memory. Tolong dong gimana caranya Applikasi induk membaca data text di component TEdit di DLL "B" ?
Aplikasi sederhana tersebut harusnya jalan dengan baik. Sudah di tes dulu kok sebelum di posting. Error seperti itu memang cukup sulit dideteksi, apalagi udah berkaitan dengan *.dll. Salah satu penyebabnya adalah penggunaan tipe data String dalam parameter Function atau nilai balik Function. Karena untuk menggunakan tipe data String, kamu harus menambahkan klausul
uses ShareMem;
pada unitnya. Itulah kenapa pada program tersebut menggunakan tipe data Char. Mungkin itu bisa menjadi salah satu peyebab Error pada progran kamu. Coba di cek lagi ya...
more ...
  • Pages:
  • 1
  • 2
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com