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:
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
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.
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.
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.
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
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.
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
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.
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.
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:
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.