FlowHeater

Willkommen, Besucher
Bitte anmelden oder registrieren.    Passwort vergessen?

Einbindung externer DLL in .Net-Heater
(1 Leser) (1) Besucher
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.
Zum Ende gehenSeite: 12
THEMA: Einbindung externer DLL in .Net-Heater
#96
Einbindung externer DLL in .Net-Heater vor 2 Monaten  
Ich habe einen umfangreichen .Net-Heater, den ich in einigen Flowheatern benutzen muß.

Aktuell kommt es zu vielen Überarbeitungen des Codes des Heaters, diese Überarbeitungen muß ich in allen fhd vornehmen, in denen ich den Code verwende.

Ist es möglich den verwendeten Code als DLL zu kompilieren und in die .Net-Heater einzubinden, so das ich statt aller überarbeitungen lediglich den Quellcode einmal ändere und die DLL neu kompiliere?
Heinz-Bernd Monschau
Fresh Boarder
Beiträge: 4
graphgraph
Benutzer offline Hier klicken, um das Profil dieses Benutzers zu sehen
Kein öffentlicher Schreibzugriff erlaubt, bitte erst registrieren!
 
#97
Aw: Einbindung externer DLL in .Net-Heater vor 2 Monaten  
Hallo Herr Monschau,

mit der aktuellen Version geht das leider noch nicht. Unter FlowHeaterBeta.zip liegt aber ein leicht modifizierter FlowHeater damit kann das abgebildet werden

Das ganze beruht auf folgenden kleinen C# .NET Skript Code für den .NET Script Heater.

Achtung: Spoiler!


Zur Verdeutlichung der Arbeitsweise ist im Anhang ein Beispiel inkl. Test DLL vorhanden. In der DLL ist eine Methode Rechne vorhanden, die 2 Übergabeparameter (int) besitzt und davon die Summe zurückliefert.
Das Skript an sich ist zwar in C#, hiermit können aber problemlos auch .NET DLLs die über VB.NET erstellt wurden, dynamisch geladen werden. Zum anpassen an den notwendigen stellen den DLL-, Klassen- bzw. Methodennamen austauschen. Evtl. noch die Übergabeparameter anpassen, das war´s auch schon.

Achtung: Das Beispiel läuft nur mit der hier verfügbaren Testversion (FlowHeaterBeta.zip) oder mit einer Version >= 1.1.9, die demnächst erscheinen wird!
Dateianhang:
Dateiname: FH_DLL_Test.zip
Dateigröße: 3430
Robert Stark
Administrator
Beiträge: 111
graph
Benutzer offline Hier klicken, um das Profil dieses Benutzers zu sehen
--
gruß
Robert Stark
Kein öffentlicher Schreibzugriff erlaubt, bitte erst registrieren!
 
#98
Aw: Einbindung externer DLL in .Net-Heater vor 1 Monat, 3 Wochen  
Hallo Herr Stark,

fast optimal (bevorzuge vb statt c#).

Läuft super. Der Einsatz dieser Technik verschiebt die Grenze der Möglichkeiten Richtung unendlich.

Besten Gruß
Monschau
Heinz-Bernd Monschau
Fresh Boarder
Beiträge: 4
graphgraph
Benutzer offline Hier klicken, um das Profil dieses Benutzers zu sehen
Kein öffentlicher Schreibzugriff erlaubt, bitte erst registrieren!
 
#105
Aw: Einbindung externer DLL in .Net-Heater vor 1 Monat, 2 Wochen  
Hinweis: In der jetzt aktuellen Version 1.1.9 ist dieser Mechanismus bereits vorhanden. Die hier beschriebene BETA Version ist dazu nicht mehr notwendig.
Robert Stark
Administrator
Beiträge: 111
graph
Benutzer offline Hier klicken, um das Profil dieses Benutzers zu sehen
--
gruß
Robert Stark
Kein öffentlicher Schreibzugriff erlaubt, bitte erst registrieren!
 
#145
Aw: Einbindung externer DLL in .Net-Heater vor 1 Woche, 5 Tagen  
Hallo Forumsleser,

ist jemand in der Lage den Beispielcode zur Einbindung einer externen dll con C# nach vb.net zu übersetzen?

Ich bin daran gescheitert.
Heinz-Bernd Monschau
Fresh Boarder
Beiträge: 4
graphgraph
Benutzer offline Hier klicken, um das Profil dieses Benutzers zu sehen
Kein öffentlicher Schreibzugriff erlaubt, bitte erst registrieren!
 
#153
Aw: Einbindung externer DLL in .Net-Heater vor 1 Woche, 4 Tagen  
VB.NET ist gerade bei solch komplexen Sachen nicht so mein Ding, hab es trotzdem mal versucht. Hier der Skript Code in VB.NET.

Code:

Dim instance As Object

    Private Function DoWork() As Object

        Dim baseBindingFlags As BindingFlags
        baseBindingFlags = BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance

        ' beim 1. Aufruf DLL laden und Instance erzeugen
        If instance = Nothing Then
            ' Klassenname inkl. kompletten Namespace
            Dim classname As String
            classname = "FHTest.Class1"

            ' welche .NET DLL soll geladen werden
            ' die DLL wird aus dem gleichen Verzeichnis, wo die Definition gespeichert ist, geladen
            ' es gehen aber auch absolute Pfadangaben!
            Dim asm As Assembly
            asm = Assembly.LoadFrom("FHTest.dll")


            ' Instance der Klasse erzeugen
            Dim t As Type
            t = asm.GetType(classname)

            instance = t.InvokeMember(classname, BindingFlags.CreateInstance, Nothing, Nothing, Nothing)
        End If


        ' Heater Eingangsparameter holen
        Dim i1 As Integer
        Dim i2 As Integer

        i1 = InValues(0).GetInt()
        i2 = InValues(1).GetInt()

        ' Übergabeparamater für die Funktion festlegen.
        ' Die Anzahl sowie Typen der Parameter richtet sich nach der Methode die gerufen werden soll
        Dim args() As Object = {i1, i2}

        ' Methode Rechne der Klasse Class1 aufrufen und Wert zurückliefern   
        DoWork = instance.GetType().InvokeMember("Rechne", BindingFlags.InvokeMethod, Nothing, instance, args)

End Function



Leider funktioniert das ganze bei mir nicht über den .NET Script Heater vom FlowHeater. Aus einer VB.NET Visual Studio WinForms Solution Anwendung heraus klappt es aber mit der DLL aus dem Beispiel.

Bitte versuchen Sie das mal bei sich mit einer reinen VB.NET DLL, ich könnte mir Vorstellen dass es dann funktioniert, ein Versuch ist es Wert.

Anmerkung: Der C# Skript Code funktioniert
Robert Stark
Administrator
Beiträge: 111
graph
Benutzer offline Hier klicken, um das Profil dieses Benutzers zu sehen
--
gruß
Robert Stark
Kein öffentlicher Schreibzugriff erlaubt, bitte erst registrieren!
 
Zum Anfang gehenSeite: 12
Moderation: Robert Stark
die neusten Beiträge direkt auf Ihrem Desktop erhalten

Wer ist Online

Wir haben 9 Gäste online

Login