Announcement

Collapse
No announcement yet.

Einbinden einer dll in eine WinForm-Anwendung!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Einbinden einer dll in eine WinForm-Anwendung!

    Hallo!
    Habe mir einen USB-Adapter geleistet (Infos unter www.ullihome.de) mit dem ich über eine vorgegebene Applikation via Bitbanging-Modus bis zu 6 verschiedene Ausgänge setzen kann.
    Nun möchte ich diese Ausgänge von eine C#2008 WinForm Applikation aus steuern.
    Dazu gibt es lt. Beschreibung eine dll-Datei, über diesen es möglich sein sollte.
    Habe aber keine Ahnung, wie ich diese dll-Datei einbinden soll, bzw. wie ich die Funktionen ansprechen muss, um die Ausgänge zu setzen bzw. eine Rückmeldung zu erhalten.
    Vielleicht weiß es von euch jemand!
    Danke Pap

    Lt. Beschreibung:
    Programmieranweisung
    USB AVR Lab Bibliothek
    Eine Bibliothek um die Bitbanging
    Firmware mit eigenen Programmen zu steuern

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    // für DLLImport
    using System.Runtime.InteropServices;
    
    public class usbavrlab
    {
        [DllImport("usbavrlablib.dll")]
        extern static void CloseDevice();
    }
    
    namespace USB_AVR_LabTool
    {
        public partial class frm_LED : Form
        {
            /* *************************************
                       Programmieranweisung
                        USB AVR Lab Bibliothek
                    Eine Bibliothek um die Bitbanging
            Firmware mit eigenen Programmen zu steuern
                            www.ullihome.de
             **************************************** */
            public frm_LED()
            {
                InitializeComponent();
            }
    
            private void frm_LED_Load(object sender, EventArgs e)
            {
                
            }
    
            private void bt_LED_EIN_Click(object sender, EventArgs e)
            {
                //Hier sollte mann die LED einschalten können
            }
    
            private void bt_LED_AUS_Click(object sender, EventArgs e)
            {
                //Hier sollte mann die LED ausschalten können
            }
    
            private void lbl_Rueckm_Anz_Click(object sender, EventArgs e)
            {
                //Status der LED sollte hier angezeigt werden (lbl_Rueckm.Text;)
            }
        }
    }

  • #2
    Hallo,

    meine erste Frage lautet: Handelt es sich um eine .NET-Assembly? Wenn das Code-Gerüst, das du zitierst, wirklich aus der "Programmieranweisung" stammt, ist diese Frage bereits mit ja beantwortet.

    Dann ist die DLL wie jede andere .NET-Assembly einfach über Referenzen einzubinden; der DLLImport müsste überflüssig sein. Stattdessen ist eine Instanz einer Klasse zu erzeugen, die dem Adapter entspricht und mit der er gesteuert wird. Das sieht dann in deinem Programm etwa so aus (aber ein Klassenname mit Kleinbuchstaben - igitt):
    Code:
    usbavrlab lab = new usbavrlab();
    lab.OpenDevice();
    lab.LED.Status = true;   // oder wie auch immer das läuft
    Das Code-Gerüst sind schließlich keine Methoden, mit denen du etwas steuerst, sondern es sind Ereignisse, die der Adapter auslöst und auf die du in deinem Programm reagieren kannst.

    Es kommt mir so vor, als ob du dich erst mit den Grundlagen eines .NET-Programms befassen müsstest (Klassen, Objekte/Instanzen, Eigenschaften, Methoden, Ereignisse).

    Gruß Jürgen

    Comment


    • #3
      In dem Download in dem die 'usbavrlablib.dll' steckt befindet sich auch ein Programming-Manual. Die dort beschrieben Methoden solltest du benutzen .... wenn du den mit der dürftigen Beschreibung klar kommst. Vielleicht einfach mal den Author nach mehr Details befragen.

      Bei SetPortBits rate ich mal das Gerätehandle ein IntPtr ist (der Pointer der aus OpenDevice zurück kommt, Pointer stellt man wahrscheinlich als IntPtr in C# dar). Und 'Zu setzende Bits' wird irgendein Integerdatentyp sein. Da du was von 6 Ausgängen erzählt hast würde ich mit dem kleinsten Typ 'byte' anfangen und gegebenfalls wenn das nicht passt ~hocharbeiten~. Wobei du dann immer noch raten mußt welches Bit den für welchen Ausgang steht.

      Das sähe dann z.B. wohl so aus

      Code:
      // Defintion
      [DllImport("usbavrlablib.dll")]
      static extern IntPtr OpenDevice(Int32 Index);
      [DllImport("usbavrlablib.dll")]
      static extern bool SetPortBits(IntPtr hDevice, byte bits);
      Code:
      //Call
      IntPtr device = OpenDevice(1); // Vermutlich identifiziert Index den USB-Port wie sich der richtige Index ermittelt weiß ich nicht. Ich nehm einfach mal 1 an.
      SetPortBits(device, (byte)13); // Lassen wir uns überraschen ob und welche LEDs leuchten
      Vermutlich wird das nicht auf Anhieb funktionieren. Dann solltest du mutig ein paar andere Datentypen durchprobieren.

      Comment

      Working...
      X