Autor Beitrag
Terra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 31.03.06 19:28 
Hallo ...

Habe ein Programm das mittels Param(1) (hieß das so? *grübel*) ein String aus dem Internet empfgangen kann. Klappt super! .. Allerdingst habe ich noch paar Plugins (auch selbst geschrieben) im Programm wo je nach String eins davon gestartet werden und diesen String erstmal ausgeben soll.
Dafür muss im Hauptprogramm der String aufgeschlüsselt werden und je nach string wird ein bestimmtes plugin geöffnet .. ok, soweit die überlegung.
Kann ich das auch mit Param(1) in den Plugins machen oder gibbet da eine elegantere Lösung?

Habe hier sowas wie mit Copy Memory oder so gelesen .. allerdingst hab ich garkein Plan wie das gehen sollte.

Terra
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Fr 31.03.06 20:01 
Wie realisierst du denn die PlugIns? per DLLs?
Auf jeden Fall solltest du die URL (ParamStr(1)) schön dem PlugIn übergeben, sprich durch setzen eines Feldes oder bei ner DLL zum Beispiel sowas:
Du exportierst in der DLL eine weitere Funktion, z.B.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  sURL : string;

procedure SetURL(pcURL: PChar); stdcall;
begin
  sURL := pcURL;
end;

exports
  SetURL;

und die Rufst du aus deinem "Hauptprogramm" dann eben so auf:
ausblenden Delphi-Quelltext
1:
SetURL(PChar(ParamStr(1)));					




MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 31.03.06 22:05 
Dann ist es egal welches Plugin ich aufrufe solang ich den größeren Source in jeden Plugin eingebunden habe? Es werden dann immer die gleichen Parameter weitergegeben?

Ja, die Plugins sind DLL´s.
Muss ich dann einfach nur im Hauptprogramm sagen: Plugin1 = #01, Plugin2 = #02..
Wenn ich dann den String aufteile: #02-2000 .... 02 für das 2. Plugin und 2000 der String der an das Plugin weitergeleitet werden soll.

Schreib ich dann deinen Source überall hinzu öffnet er das 2. Plugin und übergibt an dem den Wert 2000 an sURL.

Eins müsstest du mir aber noch erklären.

Zitat:
exports
SetURL;


Was macht dieser Befehl und wo muss ich den hinschreiben ? Am ende meines Sources ?

Terra
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Fr 31.03.06 22:14 
Achso! Moment, dann hab ich das falsch verstanden. Ich dachte du bekommst _einen_ Parameter an dein Hauptprogramm übergeben und diesen einen willst du an alle PlugIns weitergeben... Aber das sollte eigentlich ähnlich funktionieren. Du musst dann im Hauptprogramm nur noch alle ParamStrs durchparsen und eben das Plugin raussuchen, an das du den Parameter übergeben willst. Wieviele Parameter du übergeben bekommen hast bekommst du mit ParamCount raus.

Bei "exports" hilft dir auch die Delphi-Hilfe :D Aber ich will ja mal nicht so sein: Nur Prozeduren/funktionen, die du in der DLL bei "exports" angibst, können nachher von externen Programmen (wie deinem Hauptprogramm) aufgerufen werden.



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 31.03.06 23:03 
OK Danke .. werds mal ausprobieren ...

Terra
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Di 04.04.06 10:40 
Das ist ja jetzt natürlich doof....

Da mein Programm nur einmal gestartet werden soll und beim nochmaligen start (wenns schon gestartet ist) den Befehl "halt;" bekommt werden meine Parameter nicht mehr übergeben. Sprich, nur wenn das Programm mit Parametern das erste mal gestartet wird funktioniert die Parameterübergabe.

Habe www.delphi-library.d...rtet+wird_19370.html diese Funktion eingebaut um das Programm nur einmal starten lassen zu dürfen.

Wie kann ich es denn jetzt ändern, so das auch das laufende Programm Parameter empfangen kann ?

Terra
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Fr 07.04.06 10:24 

_________________
Ein Nutzer der Ecke ;-)
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Di 11.04.06 12:05 
Geht das denn nicht einfacher ?

Hier mal die Unit, die ich in meinem Programm mit eingebunden habe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
unit unit4;

interface

implementation

uses windows,Dialogs,sysutils, unit1;

var mHandle: THandle;
    parameter2 : string;

Initialization
  mHandle := CreateMutex(nil,True,'Programmname');
// xxxxxxx
  if GetLastError = ERROR_ALREADY_EXISTS then begin
  Halt;
end;

finalization
  if mHandle <> 0 then
    parameter2 := ParamStr(1);
    //showMessage(parameter2);
    
    CloseHandle(mHandle)
end.


Diese rufe ich im Hauptprogramm so auf:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
implementation

uses unit4;

{$R *.dfm}


nu startet das Hauptprogramm nur 1x.

Gibt es nicht eine wirklich einfache Methode "parameter2" an meine unit1 zu übergeben?
Spielt auch keine Rolle ob ich die Parameter abrufe wie sie in der Unit4 stehen oder wenn das auch dort stehen würde, wo //xxxxxxx steht.

Wenn ich ShowMessage aktiviert lasse, das Programm 1x gestartet ist und ich das Programm mit einem Parameter aufrufe erscheint auch der Parameter in der ShowMessage anweisung. Allerdingst peil ich absolut nicht wie ich parameter2 an unit1 übergeben soll.

Terra
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 11.04.06 12:29 
Alternativ (und seehr unsauber, da unsicher) kannst du mit SendMessage arbeiten.
SendMessage ermöglicht dir, an ein Programm (oder gleich an alle) eine Message zu senden (wie z.B. WM_USER), und dieser Parameter zu übergeben (2 Cardinal werte IIRC, kann man ja auch nen string darin verpacken...)
Problem: Man kann per SendMessage an HWND_BROADCAST senden, das bedeutet, die Nachricht wird an alle laufenden Programme gesendet, und wenn dein Programm das mitbekommt (was es tun wird), dann weis es nicht, von welchem anderen Programm die Nachricht kam, und es kann zu Störungen kommen. Wollte nur mal eine weitere Möglichkeit einwerfen, die mir grad so eingefallen ist, aber wenn du was besseres findest, nimm das.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
{...}
    Private
        { Private-Deklarationen }
        Procedure Ready(Var Msg: TMessage); Message WM_USER;
{...}
Procedure TForm1.Ready(Var Msg: TMessage); //sobald eine WM_USER eintrifft, wird diese Prozedur ausgeführt.
Begin
    If (Msg.WParam = 55443322And (Msg.LParam = 12122323Then
        rdy := true;
End;

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.