Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriff auf DLL Procedure von DLL interner Form (https://www.delphipraxis.net/47213-zugriff-auf-dll-procedure-von-dll-interner-form.html)

AGuther 7. Jun 2005 23:08


Zugriff auf DLL Procedure von DLL interner Form
 
Hallo zusammen!

Ich habe eine Frage, weil ich nicht mehr weiterkomme. Ich bin dabei, eine DLL mit Delphi zu erstellen, die integrierte Forms hat. Jetzt habe ich aber folgendes Problem: ich möchte von der Form aus eine Funktion oder Prozedur in der DLL starten, aber ich weiss nicht wie ich auf diese Zugriff bekommen kann. Ich hoffe mir kann jemand helfen. Ich hab den Quelltext auch angehängt.

Code der DLL selbst:
Delphi-Quellcode:
library DienstplanRDP_DLL;
uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  ComObj,
  Frm_Info in 'Frm_Info.pas' {Frm_Test};
var
  oXL: Variant;

  {$R *.res}

procedure DLL_Init();stdcall;
begin
  oXL := GetActiveOleObject('Excel.Application');
end;

procedure DLL_Terminate();stdcall;
begin
  oXL := Unassigned;
end;

procedure Test_Excel();stdcall;
var
  Tmp: String;
begin
  Frm_Test := TFrm_Test.Create(nil);
  oXL.ActiveSheet.Cells[2, 1] := 'Test DLL';
  Tmp := oXL.ActiveSheet.Cells[1,1];
  ShowMessage(Tmp);
  Frm_Test.ShowModal;
end;

procedure Test_Frm(Tmp: String);stdcall;
begin
  ShowMessage(Tmp);
end;

exports
  DLL_Init, DLL_Terminate, Test_Excel, Test_Frm;

begin
end.
Code des Forms, integriert in das Projekt für die DLL:
Delphi-Quellcode:
unit Frm_Info;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TFrm_Test = class(TForm)
    Btn_OK: TButton;
    Txt_Box1: TEdit;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Btn_OKClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Frm_Test: TFrm_Test;

implementation

{$R *.dfm}

procedure TFrm_Test.Btn_OKClick(Sender: TObject);
begin
// Hier sollte der Aufrauf einer Funktion stehen!?
   Frm_Test.Close;
end;

procedure TFrm_Test.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

end.

Ich hoffe von Euch hat jemand eine Idee :-)

Vielen Dank und Gruß
Andreas

Boombuler 8. Jun 2005 07:17

Re: Zugriff auf DLL Procedure von DLL interner Form
 
Da ändert sich eigentlich nichts zum normalen aufrufen von "Form-Funktionen"...
würde dir schon fast empfehlen in den DLL Code sowas zu schreiben:

Delphi-Quellcode:
initialization
Frm_Test:= TFrm_Test.Create;

finalization
Frm_Test.free;
dann kannst du innerhalb deiner DLL die Form einfach nur mit Frm_Test.MachWas aufrufen...

die Sache ist eben das du zum Aufrufen deiner Funktionen eine Inztanz der Form brauchst...


Greetz
Boombuler

marabu 8. Jun 2005 07:18

Re: Zugriff auf DLL Procedure von DLL interner Form
 
Hallo Andreas,

deine Form Frm_Test kann nur auf solche Funktionen zugreifen, die im interface einer Unit aufgeführt sind. Erzeuge einfach eine Unit SharedU und kopiere die gewünschten Funktionen dort hinein. Wenn du diese Unit dann in die uses-Liste deiner Unit Frm_Info aufnimmst, solltest du keine Probleme mehr mit dem Aufruf haben.

Grüße vom marabu

AGuther 8. Jun 2005 10:57

Re: Zugriff auf DLL Procedure von DLL interner Form
 
Hallo!

Vielen Dank erst mal für eure nette Hilfe!

Verstehe ich es richtig, dass es im Prinzip keine Möglichkeit gibt auf die Funktionen die unter Library stehen direkt zuzugreifen, oder? Ich muss also eine neue Unit anlegen und von beiden (also von der Library und von der Form) darauf zugreifen, oder?
Schöner würde ich es halt finden, wenn es direkt gehen würde, denn sonst müsste ich für Funktionen die ich von der DLL aus aufrufen möchte ja jeweils ne kleine Procedure schreiben...geht halt dann über 2 Ecken...

Vielleicht noch ne Idee? :-)

Danke und Gruß
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 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