Hallo Leute,
folgendes Problem. Ich habe ein laufendes Programm, welches eine Datenbank im RAM aufgebaut hat. Wie kann ich das laufende Programm von außen, also von einem anderen Programm aus triggern und Daten zur Suche in der RAM DB zu übergeben, und eine entsprechende Antwort mit dem Ergebnis zurück geben?
Man könnte zwar das Programm mit Übergabeparameter jedesmal neu starten, da der Aufbau der Datenbank aber ca. 20 Sekunden dauert, ist das keine Option.
Jemand eine Idee?
Danke schon mal für hilfreiche Antworten.
menschmarkus
laufende exe triggern + Struktur an Procedure übergeben [OK]
-
MenschMarkus
- Beiträge: 227
- Registriert: 30.04.2009 21:21
- Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS
laufende exe triggern + Struktur an Procedure übergeben [OK]
Zuletzt geändert von MenschMarkus am 15.11.2016 10:41, insgesamt 1-mal geändert.
Wissen schadet nur dem, der es nicht hat !
Re: laufende exe triggern
Du kannst das z.B. mit einem Callback machen.
Programm A sendet an Programm B: http://www.rsbasic.de/aktualisierung/wi ... mclient.pb
Programm B empfängt die Nachricht: http://www.rsbasic.de/aktualisierung/wi ... mserver.pb
Programm A sendet an Programm B: http://www.rsbasic.de/aktualisierung/wi ... mclient.pb
Programm B empfängt die Nachricht: http://www.rsbasic.de/aktualisierung/wi ... mserver.pb
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: laufende exe triggern
Naja, wenn mir jemand sagen kann, was RegisterWindowMessage_("MyOwnMessage") im Code da sucht 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: laufende exe triggern
Stimmt. Das wird in diesem Fall gar nicht benötigt. Danke für den Hinweis.
-
MenschMarkus
- Beiträge: 227
- Registriert: 30.04.2009 21:21
- Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS
Re: laufende exe triggern
Ok, erst mal Danke für Eure schnelle Rückantworten.
Es ist schon mal ein Lösungsansatz.
Wie sieht es aber aus, wenn einer mit einem in z.B. C++ geschriebenen Programm auf mein Programm triggern möchte.
Gehört zwar nicht mehr zum Thema aber dennoch eine anschließende Frage
Ich bin am überlegen, ob es da nicht besser ist eine DLL zu erzeugen, die dann, so hoffe ich, auch von Programmen welche in C++/C#/Java o.ä. geschrieben wurden, aufgerufen werden kann. Kann ich leider selbst mangels Wissen nicht testen.
Einige Versuche unter PB habe ich schon erfolgreich durchgeführt. Allerdings die DLL sowie das aufrufende Programm in PB geschrieben.
Hier mal ein Beispiel der DLL mit Parameterübergabe
Der aufrufende code lautet:
Würde der Aufruf dieser DLL auch mit anderer Programmiersprache funktionieren?
Die nächste Frage wird lauten, wie kann ich eine Struktur an die DLL übergeben und wie nehme ich diese in der DLL an?
Danke schon mal für Eure Hilfe
menschmarkus
[edit 15.11.2016]
Einmal kurz nachgedacht und die angekündigte Frage hat sich gelöst. Hier das umgesetzte Beispiel (Der Vollständigkeit halber
)
DLL mit beiden Varianten:
Der aufrufende code mit beiden Varianten lautet:
Es ist schon mal ein Lösungsansatz.
Wie sieht es aber aus, wenn einer mit einem in z.B. C++ geschriebenen Programm auf mein Programm triggern möchte.
Gehört zwar nicht mehr zum Thema aber dennoch eine anschließende Frage
Ich bin am überlegen, ob es da nicht besser ist eine DLL zu erzeugen, die dann, so hoffe ich, auch von Programmen welche in C++/C#/Java o.ä. geschrieben wurden, aufgerufen werden kann. Kann ich leider selbst mangels Wissen nicht testen.
Einige Versuche unter PB habe ich schon erfolgreich durchgeführt. Allerdings die DLL sowie das aufrufende Programm in PB geschrieben.
Hier mal ein Beispiel der DLL mit Parameterübergabe
Code: Alles auswählen
; **********
; Program name: mydll.dll
; **********
EnableExplicit
Structure par
value1.s
value2.s
value3.s
EndStructure
Global parameter.par
ProcedureDLL.s apitest(value1.s,value2.s,value3.s)
Protected dllreturn.s
parameter\value1 = value1
parameter\value2 = value2
parameter\value3 = value3
; ... weiterer Code
dllreturn = parameter\value1 + " / " + parameter\value2 + " / " + parameter\value3
ProcedureReturn dllreturn
Endprocedure
Code: Alles auswählen
EnableExplicit
Define result.i
if OpenLibrary(0,"mydll.dll")
result = CallFunction(0,"apitest",@"Dies",@"ist",@"ein Text")
CloseLibrary(0)
MessageRequester("DLL Rückgabe",PeekS(result))
else
MessageRequester("Fehler","Konnte DLL nicht öffnen")
endif
Die nächste Frage wird lauten, wie kann ich eine Struktur an die DLL übergeben und wie nehme ich diese in der DLL an?
Danke schon mal für Eure Hilfe
menschmarkus
[edit 15.11.2016]
Einmal kurz nachgedacht und die angekündigte Frage hat sich gelöst. Hier das umgesetzte Beispiel (Der Vollständigkeit halber
DLL mit beiden Varianten:
Code: Alles auswählen
; **********
; Program name: mydll.dll
; **********
EnableExplicit
Structure par
value1.s
value2.s
value3.s
EndStructure
Global parameter.par
ProcedureDLL.s apitest(value1.s,value2.s,value3.s)
Protected dllreturn.s
parameter\value1 = value1
parameter\value2 = value2
parameter\value3 = value3
; ... weiterer Code
dllreturn = parameter\value1 + " / " + parameter\value2 + " / " + parameter\value3
ProcedureReturn dllreturn
Endprocedure
ProcedureDLL.s apitest2(*struktur.par)
Protected dllreturn.s
;... weiterer Code
dllreturn = *struktur\value1 + " / " + *struktur\value2 + " / " + *struktur\value3
ProcedureRetrn dllreturn
EndProcedure
Code: Alles auswählen
EnableExplicit
Define result.i
;Struktur definieren
Structure par
value1.s
value2.s
value3.s
EndStructure
Global parameter.par
;Aufruf der DLL mit Übergabe einzelner Parameter
if OpenLibrary(0,"mydll.dll")
result = CallFunction(0,"apitest",@"Dies",@"ist",@"ein Text")
CloseLibrary(0)
MessageRequester("DLL Rückgabe",PeekS(result))
else
MessageRequester("Fehler","Konnte DLL nicht öffnen")
endif
;Struktur mit Werten füllen
parameter\value1 = "Dies"
parameter\value2 = "ist"
parameter\value3 = "ein Text"
;Aufruf der DLL mit Übergabe einer Struktur
if OpenLibrary(0,"mydll.dll")
result = CallFunction(0,"apitest2",parameter)
CloseLibrary(0)
MessageRequester("DLL Rückgabe",PeekS(result))
else
MessageRequester("Fehler","Konnte DLL nicht öffnen")
endif
Wissen schadet nur dem, der es nicht hat !

