Array mit Prozessen

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Delegates

Post by lagraf »

Hallo Wolfgang,
den Rückgabewert logic hatte ich schon eingebaut, trotzdem kommt der Fehler!
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Delegates

Post by wriedmann »

Hallo Franz,

bei mir kompiliert das schon so:
EnumWindows.png
EnumWindows.png (124.66 KiB) Viewed 587 times
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Delegates

Post by lagraf »

Hi Wolfgang,
du hast hier
//STATIC LOCAL oEnumWindowsProcDelegate := EnumWindowsProc AS EnumWindowsProc_Delegate
auskommentiert, was im Beispiel nicht war. Damit ist 1 Fehler weniger, aber einer bleibt trotzdem noch übrig!
Wolfgang.jpg
Wolfgang.jpg (131.3 KiB) Viewed 587 times
User avatar
SHirsch
Posts: 286
Joined: Tue Jan 30, 2018 8:23 am
Location: Germany

Delegates

Post by SHirsch »

Hallo

der DELEGATE hat eine andere Signatur als die FUNCTION
Der zweite Parameter ist im DELEGATE ARRAY und in der FUNCTION IntPtr.

Diese müssen gleich sein. Bei Wolfgang ist das IntPtr

Stefan
Karl-Heinz
Posts: 774
Joined: Wed May 17, 2017 8:50 am
Location: Germany

Delegates

Post by Karl-Heinz »

Jungs,

Ich krieg das nur zum laufen wenn ich die Signature anpasse:

Code: Select all

DELEGATE EnumWindowsProc_delegate( hWnd AS PTR, aWindows AS IntPtr ) AS LOGIC // anstelle "aWindows AS ARRAY"
Gruß
Karl-Heinz
Karl-Heinz
Posts: 774
Joined: Wed May 17, 2017 8:50 am
Location: Germany

Delegates

Post by Karl-Heinz »

SHirsch wrote:Hallo

der DELEGATE hat eine andere Signatur als die FUNCTION
Der zweite Parameter ist im DELEGATE ARRAY und in der FUNCTION IntPtr.

Diese müssen gleich sein. Bei Wolfgang ist das IntPtr

Stefan
Fast zeitgleich - als ob es abgesprochen gewesen wäre ;-)
FFF
Posts: 1580
Joined: Fri Sep 25, 2015 4:52 pm
Location: Germany

Delegates

Post by FFF »

Was vielleicht damit zusammenhängt: (MS) "Nach Instanziierung eines Delegaten können Sie die Instanz mit einer beliebigen Methode verknüpfen, die eine kompatible Signatur und einen kompatiblen Rückgabetyp aufweist."
Ich lese mal kompatibel = "gleich" - also nicht nur Param-typen sondern eben auch der Rückgabetyp muß übereinstimmen...
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
User avatar
SHirsch
Posts: 286
Joined: Tue Jan 30, 2018 8:23 am
Location: Germany

Delegates

Post by SHirsch »

Ich lese mal kompatibel = "gleich" - also nicht nur Param-typen sondern eben auch der Rückgabetyp muß übereinstimmen...
korrekt
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Delegates

Post by lagraf »

Hallo Leute,
ihr habt Recht, den 2. Parameter beim DELEGATE habe ich glatt überlesen. Ich habe den Code aus Wolfgangs früherem Posting übernommen und da war der Parameter noch ARRAY!
Jetzt klappt es!
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

Delegates

Post by lagraf »

Hi Karl
ich hab mal mit meinen nicht vorhandenen C# Kenntnissen versucht, die FileSystemWatcher Class umzusetzen, was natürlich nicht gelungen ist :(

Code: Select all

USING System
USING System.IO
USING System.Text
USING System.Threading
 
CLASS FileInputMonitor
	PROTECT oFileSystemWatcher AS FileSystemWatcher
	PROTECT cfolderToWatchFor := "C:TMP" AS STRING
 
	CONSTRUCTOR()
 
		oFileSystemWatcher := FileSystemWatcher{cfolderToWatchFor}
		oFileSystemWatcher.EnableRaisingEvents := TRUE
 
		// Instruct the file system watcher to call the FileCreated method
		// when there are files created at the folder.
		oFileSystemWatcher.Created += FileSystemEventHandler{FileCreated}

		RETURN SELF
		 
	METHOD FileCreated(osender AS OBJECT, e AS FileSystemEventArgs) AS VOID PASCAL

		IF Right(Upper(e.Name),4) == ".PRN"
			ProcessFile(e.FullPath)
		ENDIF
		
		RETURN SELF

	METHOD ProcessFile(fileName AS STRING) AS VOID PASCAL
		LOCAL inputFileStream AS FileStream
		LOCAL reader AS StreamReader

		DO WHILE TRUE 
			TRY
				inputFileStream := FileStream{fileName, FileMode.Open, FileAccess.ReadWrite}
				reader := StreamReader{inputFileStream}
				Console.WriteLine(reader.ReadToEnd())
				// Break out from the endless loop
				BREAK

			CATCH e AS exception
				// Sleep for 3 seconds before trying
				Thread.Sleep(3000)

			END TRY
		ENDDO

		RETURN SELF

END CLASS
Es kommen Fehler wie
XS0246: Type or namespace 'oFileSystemWatcher" could not be found
XS0118: 'e' and 'reader' is a variable but is declared like a type

Was mache ich da falsch?
Post Reply