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