Laden...

DLL-Dateien laden

Erstellt von CShAnfaenger vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.352 Views
C
CShAnfaenger Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren
DLL-Dateien laden

Hallo,

ich bin ziemlich neu, sowohl im Programmieren, ebenso wie in .net-Programmierung. Ich habe ein Projekt bekommen und interessiere mich sehr dafür. Ich bitte trotzdme um Geduld 😃. Dabei soll das Programm folgendes machen:

  • auf eine dll-Datei zugreifen. Dies enthält eine Library für verschiedene Befehle, die in C# geschrieben sind.

Diese soll ich dann verwendet werden um Befehle wie anhalten und rotieren eines Motors durchzuführen.

Jedoch hänge ich noch am Laden der dll-Datei.

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace motorstrg
{

    class Program
    {
        static void Main(string[] args)
        {
            string dllFile = @"pfad";
            var assembly = Assembly.LoadFile(dllFile);

            var type = assembly.GetType("omrlib.dll");
            var obj = Activator.CreateInstance(type);
           
            var method = type.GetMethod("Hallo");
            var result = method.Invoke(obj, new object[] { "zgh" });

            Console.WriteLine(result);
            Console.Read();
        }
    }

}

Das ist mein megacode. Ich hoffe, dass es bis dahin klappt. Leider zeigt er in der Zeile bei "getType" immer "null". Ich weiß aber nicht was da reinkommt.

Vielen Dank und Freundliche Grüße,

Lukas

P
441 Beiträge seit 2014
vor 3 Jahren

Hi,

vermutlich ist es einfacher als du denkst.
Hast du die DLL nur auf der Festplatte vorliegen oder ist diese über einen Paketmanager (NuGet im .NET Umfeld) verfügbar?

Falls nur auf Festplatte:
Füge deinem Projekt einfach einen Verweis auf die .dll hinzu. Am sinnvollsten legst du sie in dein Projektverzeichnis mit hinein/in einen Unterordner.
Es gibt da zur Projektstrukturierung einige passende Informationen in der offiziellen .NET Dokumentation.

Wenn sie über NuGet verfügbar ist, binde sie darüber ein.

2.079 Beiträge seit 2012
vor 3 Jahren

Und wenn's ein eigenes Projekt ist, füge es der Projektmappe hinzu und füge einen Verweis darauf hinzu.
Der Rest passiert automatisch

By the way:
[FAQ] Wie finde ich den Einstieg in C#?

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

C
CShAnfaenger Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

Vielen Dank bis hier hin.

Ich habe die erste .dll-Datei erfolgreich eingebunden. die zweite existiert als x64 und x86-Version.

Egal von wo ich es einbinde - es kommt zu der Meldung:"Der Verweis ist ungültig oder wird nicht unterstützt."

Die Datei ist vom Hersteller kreiert. Wo könnte das Problem liegen?

<jetzt habe ich das Problem natürlich gegoogelt und da stet, dass sich der Verweis auf eine COM-Komponente bezieht, die nicht untersützt wird.

Kann man das beheben? 😃

Vielen Dank und

freundliche Grüße,

Lukas

E:

Habe es doch nicht gelöst.

Hab den vermeintlich fehlenden COM-Verweis hinzugefügt, aber dann wurde gesagt, dass ein Assembly Code fehlt.

Läuft noch nicht so.

5.658 Beiträge seit 2006
vor 3 Jahren

Kannst du bitte mal genauer erkläaren, was du hast und was du machst?

Handelt es sich bei der DLL um eine .NET-Assembly?

Wenn du eine Fehlermeldung bekommst, dann poste die Meldung bitte hier. Oder besser noch, gib die Meldung (am besten die Englische) bei Google ein, und finde die Lösung dafür. Du kannst davon ausgehen, daß du nicht der erste bist, der eine DLL in ein Projekt einbinden möchte.

Bitte beachte [Hinweis] Wie poste ich richtig?, besonders Punkt 1.1 und 5.

Weeks of programming can save you hours of planning

4.939 Beiträge seit 2008
vor 3 Jahren

Für das Einbinden vom COM-Libraries gibt es extra den Menüpunkt "Project"/"Add COM Reference".
Falls es dort zu Fehlern kommt (oder die Library dort nicht existiert), gibt es "TlbImp" (von "Developer Command Prompt for VS 201X" aufrufen) zum Erzeugen der Interop-Assembly.

C
CShAnfaenger Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

Touché zu Punkt 5. Sehe ich natürlich ein.

Ich habe vom Hersteller eine library bekommen. Dabei versuche ich nun die DLL-Dateien einzubinden und möchte dann über die Library den RTU MODBUS mit vorfertigten Programmen ansteuern und befehligen. Dabei gibt es 2 DLL Dateien. Die eine hat mühelos nach Hilfestellung funktioniert.

Ich vermute die eine DLL ist für die ausführenden Befehle wie Move und STop - das müsste auch die sein, die funktioniert. Die andere könnte für die Kommunikation sein - kann das sein?

Ich hatte dann zunächst die unten aufgeführte Fehlermeldung :"Der Verweis ist ungültig oder wird nicht unterstützt." Das war die Fehlermeldung mit einer Consolen-application.

Nun habe ich die sich im Anhang befindliche Fehlermeldung für eine Windows Form App.

Gibt das vllt aufschluss?

Ich muss gestehen, dass ich nicht weiß, ob es eine .NET Datei ist. Ich weiß es zugegebenermaßen nicht.

@Ahjo danke. Ich versuche mich noch am Umgang damit

2.079 Beiträge seit 2012
vor 3 Jahren

Ich muss gestehen, dass ich nicht weiß, ob es eine .NET Datei ist. Ich weiß es zugegebenermaßen nicht.

Nimm dir einen .NET-Decompiler und find's raus.
Aber vermutlich wird auch der sagen, dass er es nicht versteht, also entweder es ist kein .NET oder die Datei ist beschädigt.

Aber wenn Du die Datei von denen hast, müssten die dir doch auch sowas wie eine Doku geben können?

Hinter einer DLL-Datei kann alles Mögliche stecken, da ist eine Doku schon nützlich.
Das kann z.B. auch C++ sein und dann läuft das wieder ganz anders.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

P
441 Beiträge seit 2014
vor 3 Jahren

Wenn die dll's Modbus RTU mit einer Steuerung spricht könntest du auch eine in C# geschriebene komplett managed Implementierung vn Modbus nutzen um die Modbus Transaktionen durchzuführen.

R
3 Beiträge seit 2020
vor 3 Jahren

Ich bin das ganze jetzt nur grob überflogen aber eventuell musst du diese DLL Datei noch in deinem System registrieren, dafür würde ich hier folgende Anleitung empfehlen:

http://www.geeksengine.com/article/register-dll.html

F
10.010 Beiträge seit 2004
vor 3 Jahren

Oder ( was in 90% der Fälle so ist ) die eine DLL ( die einbindbare ) ist die Interop-DLL für die andere native.

Dann muss man nur die .NET DLL einbinden und zusehen das die andere zur Ausführungszeit im gleichen Verzeichnis ist.