Hallo,
ich probiere im Moment ein Pluginsystem in mein Programm einzubauen. In den Plugins ist jeweils eine Funktion um ein Bitmap zu zeichnen und zurückzugeben. Ich kann das Plugin laden und aufrufen. Bei einem "Clock" Plugin bekomme ich nix zurück, bei einem "Systemmonitor" bekomme ich ein Fehler zurück, womit ich aber nichts anfangen kann.
So rufe ich in einem 1-Sekunden Timer die jeweilige Funktion auf.
Spoiler anzeigen
Das ist die Funktion in dem Plugin womit ich die Uhr aufrufe. Wenn ich diese Funktion direkt im Hauptprogramm habe, funktioniert sie. Nur wenn sie in einem Plugin ist, wills einfach nicht mehr...
Kennt ihr vielleicht einen Grund oder (noch besser) eine Lösung zu meinem Problem?
PS: Alles Option Strict ON ;D
mfg
gfc
ich probiere im Moment ein Pluginsystem in mein Programm einzubauen. In den Plugins ist jeweils eine Funktion um ein Bitmap zu zeichnen und zurückzugeben. Ich kann das Plugin laden und aufrufen. Bei einem "Clock" Plugin bekomme ich nix zurück, bei einem "Systemmonitor" bekomme ich ein Fehler zurück, womit ich aber nichts anfangen kann.
VB.NET-Quellcode
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Debug.Print(NUM.ToString)
- Dim plug As String = availablePlugins(NUM - 1)
- Dim asm As Assembly = Assembly.LoadFrom(plug)
- Dim myType As System.Type = asm.GetType(asm.GetName.Name + ".Plugin")
- Dim plugin As LPlugin = CType(Activator.CreateInstance(myType), LPlugin)
- bmp = plugin.ShowLCD(bmp, AppNUM)
- BitmapToBLCD(bmp)
- End Sub
So rufe ich in einem 1-Sekunden Timer die jeweilige Funktion auf.
VB.NET-Quellcode
- Public Function ShowLCD(ByVal _bmp As System.Drawing.Bitmap, ByVal _NUM As Integer) As Bitmap Implements LCDAPI.LPlugin.ShowLCD
- Dim DIGIT As Font = New Font("Quartz MS", 20)
- Dim fnt As Font = New Font("Courier New", 8)
- ' Grafikbereich bereitstellen
- Dim g As System.Drawing.Graphics = Graphics.FromImage(_bmp)
- 'Grafikfläche bereinigen
- Dim clearall As New Rectangle(0, 0, 128, 64)
- Dim clearallbrush As New LinearGradientBrush(clearall, Color.White, Color.White, LinearGradientMode.Horizontal)
- g.FillRectangle(clearallbrush, clearall)
- ' Textrenderer herunterschrauben (Keine Graustufen)
- g.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
- If _NUM = 1 Then
- ' ---Digitaluhr
- ' Ein "Weisses Rechteck" definieren
- Dim cleararea As New Rectangle(1, 29, 126, 34)
- Dim _cleararea As New LinearGradientBrush(cleararea, Color.White, Color.White, LinearGradientMode.Horizontal)
- ' Ein "Schwarzes Rechteck" definieren
- Dim filled As New Rectangle(0, 28, 128, 36)
- Dim _filled As New LinearGradientBrush(filled, Color.Black, Color.Black, LinearGradientMode.Horizontal)
- ' Datum usw auslesen
- Dim Jahr As Integer = Date.Now.Year
- Dim _Monat As Integer = Date.Now.Month
- Dim _Tag As Integer = Date.Now.DayOfWeek
- ' Monats-Tabelle
- Dim Monat_Liste() As String = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"}
- ' Tag-Tabelle
- 'Dim Tag_Liste() As String = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag", "NOP"}
- Dim Tag_Liste() As String = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}
- ' Tag in der Tabelle auslesen und in einer Variable abspeichern
- Dim Monat As String = Monat_Liste(_Monat - 1)
- Debug.Print((_Tag).ToString)
- Dim Tag As String = Tag_Liste(_Tag)
- ' Schwarzer Rand zeichnen
- g.FillRectangle(_filled, filled)
- g.FillRectangle(_cleararea, cleararea)
- 'Datum und Uhr zeichnen
- g.DrawString(Tag & ", den " & Date.Now.Day.ToString & ".", fnt, Brushes.Black, 1, 1)
- g.DrawString(Monat & " " & Jahr.ToString, fnt, Brushes.Black, 1, 12)
- g.DrawString(Date.Now.ToString("HH:mm:ss"), DIGIT, Brushes.Black, 1, 27)
- Debug.Print("1=D")
- ElseIf _NUM = 2 Then
- Debug.Print("2=(")
- '---Analoguhr
- 'Kreis zeichnen
- g.DrawEllipse(Pens.Black, 32, 0, 64, 64 - 1)
- ' radius herausfinden
- Dim radius As Single = (64 \ 2)
- ' Den Mittelpunkt des kreises herausfinden
- Dim origin As New PointF(128 \ 2, 64 \ 2)
- Dim i As Single = 0.0F
- While i <> 390.0F
- ' Ziffern Zeichnen
- g.DrawLine(Pens.Black, PointOnCircle(radius - 1, i, origin), PointOnCircle(radius - 3, i, origin))
- i += 30.0F
- End While
- 'Sekundenzeiger zeichnen
- g.DrawLine(Pens.Black, origin, PointOnCircle(radius, DateTime.Now.Second * 6.0F, origin))
- 'Minutenzeiger zeichnen
- g.DrawLine(Pens.Black, origin, PointOnCircle(radius * 0.75F, DateTime.Now.Minute * 6.0F, origin))
- 'Stundenzeiger zeichnen
- g.DrawLine(Pens.Black, origin, PointOnCircle(radius * 0.5F, DateTime.Now.Hour * 30.0F, origin))
- End If
- Return _bmp
- End Function
Das ist die Funktion in dem Plugin womit ich die Uhr aufrufe. Wenn ich diese Funktion direkt im Hauptprogramm habe, funktioniert sie. Nur wenn sie in einem Plugin ist, wills einfach nicht mehr...
Kennt ihr vielleicht einen Grund oder (noch besser) eine Lösung zu meinem Problem?
PS: Alles Option Strict ON ;D
mfg
gfc