Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nochmal DLL Programmierung (https://www.delphipraxis.net/9608-nochmal-dll-programmierung.html)

Alex_ITA01 30. Sep 2003 09:04


Nochmal DLL Programmierung
 
Ich habe irgendwie immernoch das Problem von einer DLL auf die Komponenten der MainApplication
zuzugreifen. Kann mir nicht jemand mal ein kurzen Code geben der das zeigt.Muss nix weiter sein sondern nur wie ich darauf zugreif.
danke alex

Mario 30. Sep 2003 09:15

Re: Nochmal DLL Programmierung
 
Wie weit bist Du denn in der Richtung schon? Hast Du schon irgendwelchen Demo-Source, der einfach nur nicht ganz tut oder bist Du noch bei Null?

Alex_ITA01 30. Sep 2003 09:19

Re: Nochmal DLL Programmierung
 
ich habe eine dll programmiert,(nur leider kann ich auf die komponenten nicht zugreifen)
und eingebunden ist sie auch schon in der mainapplication und aufgerufen auch, muss nur denn dll quelltext ändern (denk ich)

Luckie 30. Sep 2003 09:29

Re: Nochmal DLL Programmierung
 
Wie wäre es, wen ndu uns endlich mal den Code deiner DLL zeigst? Oder wie stellst du dir vor, dass wir dir jetzt helfen sollen?

Mario 30. Sep 2003 09:31

Re: Nochmal DLL Programmierung
 
Naja, die Problematik ist recht tiefgreifend. Ohne Packages ist TForm aus der Anwendung nicht gleich TForm aus der DLL und damit geht das Problem los. Schaue Dir erst mal die hier gezeigten Links an:

http://www.delphipraxis.net/internal...ect.php?t=4335

Da wird die Problematik angesprochen. Vielleicht kann ich morgen mal ein Beispiel zusammenzimmern...

Alex_ITA01 30. Sep 2003 09:34

Re: Nochmal DLL Programmierung
 
sorry bitte schön


uses
SysUtils,
Classes;

{$R *.res}

procedure DLLSetButton;
begin
Form1.Button1.Caption := 'Wurde aus DLL geladen';
end;

exports
DLLSetButton;

begin
end.



und im Hauptprog:


const
dllname = 'Test.dll';


procedure DLLSetButton stdcall; external dllname;

Mario 30. Sep 2003 09:39

Re: Nochmal DLL Programmierung
 
:pale: Wie willst Du denn so an Form1 rankommen. Die DLL ist praktisch eine eigentständige Anwendung.

Hast Du Dir die Links schon durchgelesen?

Alex_ITA01 30. Sep 2003 09:41

Re: Nochmal DLL Programmierung
 
bin grad dabei sie mir durchzulesen
danke alex

Luckie 30. Sep 2003 09:42

Re: Nochmal DLL Programmierung
 
Und das: http://www.delphipraxis.net/internal...ect.php?t=6407

Mario 1. Okt 2003 07:39

Re: Nochmal DLL Programmierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, anbei nun ein kleines Beispiel für Delphi 6. Vom Prinzip her ist es ganz einfach:

Neues Projekt erstellen (Project1) mit einem Formular:
Delphi-Quellcode:
object Form1: TForm1
  Left = 192
  Top = 107
  Width = 274
  Height = 113
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Shell Dlg 2'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Edit1: TEdit
    Left = 16
    Top = 16
    Width = 241
    Height = 21
    TabOrder = 0
    Text = 'Edit1'
  end
  object Button1: TButton
    Left = 184
    Top = 48
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 1
  end
  object Button2: TButton
    Left = 16
    Top = 48
    Width = 100
    Height = 25
    Caption = 'DLL ausf'#252'hren'
    TabOrder = 2
    OnClick = Button2Click
  end
end
Der Quellcode ist einfach:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
  public
  end;

procedure DLLTest; external 'Project2.dll' name 'Test';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
  // Aufruf der DLL
  DLLTest;
end;

end.
Wichtig! In den Projektoptionen das Package VCL und RTL einbinden, sonst :!: KANN :!: es nicht gehen.

Dann weiteres neues Projekt als DLL-Project (Project2) im gleichen Verzeichnis erstellen.

Als Quellcode für reicht:
Delphi-Quellcode:
library Project2;

uses
  SysUtils,
  Classes,
  Forms,
  StdCtrls;

{$R *.res}


procedure Test;
begin
  TEdit(Screen.Forms[0].FindComponent('Edit1')).Text := 'Test aus DLL';
  TButton(Screen.Forms[0].FindComponent('Button1')).Caption := 'geändert';
end;

exports
  Test;

begin

end.
Auch hier unbedingt in den Projektoptionen die Packages VCL und RTL einbinden. Dann ist es gar kein Problem.

Aber! Ich persönlich halte von dem Projekt gar nix, ich habe nur die technischen Möglichkeiten gezeigt. Der Zugriff einer DLL auf die Hauptanwendung macht meiner Meinung nach keinen Sinn. In eine DLL sollten nur in sich geschlossene Funktionen ausgelagert werden, sonst ist die Quellcode-Pflege einefach schwierig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz