laufende exe triggern + Struktur an Procedure übergeben [OK]

Für allgemeine Fragen zur Programmierung mit PureBasic.
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]

Beitrag von MenschMarkus »

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
Zuletzt geändert von MenschMarkus am 15.11.2016 10:41, insgesamt 1-mal geändert.
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: laufende exe triggern

Beitrag von RSBasic »

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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: laufende exe triggern

Beitrag von Derren »

Nicht verzagen, RSBasic fragen. :allright:
Signatur und so
Benutzeravatar
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

Beitrag von ts-soft »

Naja, wenn mir jemand sagen kann, was RegisterWindowMessage_("MyOwnMessage") im Code da sucht :mrgreen:
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.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: laufende exe triggern

Beitrag von RSBasic »

Stimmt. Das wird in diesem Fall gar nicht benötigt. Danke für den Hinweis.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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

Beitrag von MenschMarkus »

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

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
Der aufrufende code lautet:

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
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:

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
Der aufrufende code mit beiden Varianten lautet:

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 !
Antworten