![]() |
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 |
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?
|
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) |
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?
|
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:
![]() Da wird die Problematik angesprochen. Vielleicht kann ich morgen mal ein Beispiel zusammenzimmern... |
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; |
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? |
Re: Nochmal DLL Programmierung
bin grad dabei sie mir durchzulesen
danke alex |
Re: Nochmal DLL Programmierung
|
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:
Der Quellcode ist einfach:
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
Delphi-Quellcode:
Wichtig! In den Projektoptionen das Package VCL und RTL einbinden, sonst :!: KANN :!: es nicht gehen.
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. Dann weiteres neues Projekt als DLL-Project (Project2) im gleichen Verzeichnis erstellen. Als Quellcode für reicht:
Delphi-Quellcode:
Auch hier unbedingt in den Projektoptionen die Packages VCL und RTL einbinden. Dann ist es gar kein Problem.
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. 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 17:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz