Kiffi hat geschrieben:vielleicht so (mit Strings):
Code: Alles auswählen
ProcedureDll.s Kommunikation(Input.s)
[lala]
ProcedureReturn Output.s
EndProc
DLLs können keine Strings zurück geben, der Rückgabewert ist immer der
Zeiger auf den String, zumindest bei PB. Oder das war/ ist ein Bug aus der
PB4.20 ... ich zumindest konnte trotz Prototype.s keine direkten Strings
empfangen. Außerdem ist der Rückgabewert lediglich "read only" ... ein
verändern des zurückgegebenen Strings für zu IMAs ... und muss der
zurückgegebene String eine globale Variable sein, da der Speicherbereich
sonnst sofort nach dem Zurückgeben wieder freigegeben wird. Strings
sollten besser per Referenz (Zeiger) der Prozedur übergeben werden, die
ihr Ergebnis in den übergebenen String (Speicherbereich) schreibt. Dafür
wiederrum muss der String aber min. schon vor dem Aufruf so groß sein,
dass das Ergebnis dort hinein passt. Das wäre aber zumindest die
Methode, wie die meisten WinAPI-Funktionen arbeiten.
Code: Alles auswählen
ProcedureDLL.i Kommunikation(Input.s, *Output)
Protected Daten.s
[lala]
If Not Daten : ProcedureReturn -1 : EndIf
If *Output And Len(PeekS(*Output)) >= Len(Daten)
PokeS(@Daten, *Output, (Len(Daten) + 1) * SizeOf(CHARACTER))
ProcedureReturn #S_OK ; = 0
Else
ProcedureReturn Len(Daten)
EndIf
EndProcedure
Deswegen hab ich scholly die Konsole vorgeschlagen
MFG PMV