Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: Einbindung externer DLL in .Net-Heater

Einbindung externer DLL in .Net-Heater 6 Jahre 4 Monate her #93

  • Heinz-Bernd Monschau
  • Heinz-Bernd Monschaus Avatar
  • Offline
  • Senior Member
  • Beiträge: 63
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?
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Einbindung externer DLL in .Net-Heater 6 Jahre 4 Monate her #94

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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.

Warnung: Spoiler! [ Zum Anzeigen klicken ]


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!

Anhang FH_DLL_Test.zip nicht gefunden

Anhang:
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 10 Monate 3 Wochen her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Einbindung externer DLL in .Net-Heater 6 Jahre 4 Monate her #95

  • Heinz-Bernd Monschau
  • Heinz-Bernd Monschaus Avatar
  • Offline
  • Senior Member
  • Beiträge: 63
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Einbindung externer DLL in .Net-Heater 6 Jahre 4 Monate her #102

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hinweis: In der jetzt aktuellen Version 1.1.9 ist dieser Mechanismus bereits vorhanden. Die hier beschriebene BETA Version ist dazu nicht mehr notwendig.
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Einbindung externer DLL in .Net-Heater 6 Jahre 3 Monate her #142

  • Heinz-Bernd Monschau
  • Heinz-Bernd Monschaus Avatar
  • Offline
  • Senior Member
  • Beiträge: 63
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Einbindung externer DLL in .Net-Heater 6 Jahre 3 Monate her #150

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
VB.NET ist gerade bei solch komplexen Sachen nicht so mein Ding, hab es trotzdem mal versucht. Hier der Skript Code in VB.NET.
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 :)
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Einbindung externer DLL in .Net-Heater 6 Jahre 3 Monate her #153

  • Heinz-Bernd Monschau
  • Heinz-Bernd Monschaus Avatar
  • Offline
  • Senior Member
  • Beiträge: 63
Hallo Herr Stark,

fuktioniert.

Es muß lediglich If isNothing(instance) Then
statt If instance=nothing heißen.

Hier nochmal komplett:


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 isNothing(instance) 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


Vielen Dank!
Monschau
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.088 Sekunden