Entwickler-Ecke

Dateizugriff - Dll ruft etwas aus Form1 auf?


Palmetshofer - Mo 18.11.02 17:44
Titel: Dll ruft etwas aus Form1 auf?
Ich möchte dass die Dll die ich in mein Programm implementiere zb. den Wert von Edit1.Enabled auf True setzt geht das?

MfG Matthias


Andreas Pfau - Mi 20.11.02 10:13

Sicher geht das!

Am einfachsten währe es, eine Prozedur in der Anwendung zu exportieren, aber ich weiß nicht, ob das geht.

Du kannst auch eine DDE-Schnittstelle erstellen, das geht sicher.

Oder du machst mit FindWindow() das fensterhandle aufindig und schickst eine Message hin, die du entsprechend implementieren musst.


Palmetshofer - Mi 20.11.02 17:14

Hmm ich verstehe nur das erste was du vorschlägst! Dass mit dem DDE hört sich interresant an! Was ist das und wie geht das?
Danke


MfG Matthias


Palmetshofer - Mi 20.11.02 18:03

Ok ich weiß jetzt wie man eine procedur exportiert und in der dll imtportiert!

Dll:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type 
  TMeineProc1 = procedure ; stdcall ; 
  TMeineProc2 = procedure ; stdcall ; 

var 
  MeineProc1 : TMeineProc1; 
  MeineProc2 : TMeineProc2; 

begin 
  @MeineProc1:= GetProcAddress( GetModuleHandle(nil) , 'MeineProc1' ) ; 
  @MeineProc2:= GetProcAddress( GetModuleHandle(nil) , 'MeineProc2' ) ; 
end.


nun möchte ich über eine function etwas prüfen lassen und wenn das mit einem gegebenen wert übereinstimmt dann soll diese procedur aufgerufen werden!
ich hab mir das so vorgestellt:

1. Dll schaut nach der Adresse der Procedur in der Exe
2. In die Dll eingebundene unit lies etwas aus der registry aus
3. function überprüft das und wenn ja soll die dll die procedur aufrufen

1. und 2. hab ich schon nun möchte ich wissen wie ich punkt 3 hinbekomme?


MfG Matthias


Andreas Pfau - Mi 20.11.02 20:14

Wo genau soll "function" sein, in der DLL oder in der Anwendung? Falls du prüfen willst, ob die DLL erfolgreich geladen wurde, numm folgenden code


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
 Handle: Integer;
 Proc: procedure;
begin
 Handle := LoadLibrary('Libname');
 If Handle <> 0 Then begin
  @Proc := GetProcAddress(Handle, 'Procname');
  If @Proc <> Nil Then begin
   {...}
  end Else {...}
  FreeLibrary(Handle);
 end Else {...}
end;


Zu DDE:
Das ist eine windows-Schnittstelle. Damit können Programme miteinander kommunizieren. Beide kommunizierenden Programme brauchen eine solche Schnitstelle (TDdeClientConv, TDdeServerConv). Wie das ohne die Compos geht, keine Ahnung. Ich kenn mich mit DDe sowieso nicht so gut aus.