none
DLL einbinden: Grundsätzliches für Newbie

    Question

  • Tag,

    wie is das mit soner DLL?
    Soweit ich das nun gelesen habe, kann ich nicht jede dll direkt in VB.net einbinden. Da es offenbar aber auch welche gibt wo das geht (bass.dll, siehe un4seen) gibts andere wo das so nicht geht (audiogenie3.dll siehe audiogenie)
    Ich habe gelesen, dass es drauf ankommt, in welcher Sprache die dll geschrieben ist.
    Kann ich das der dll denn ansehen?

    Gibts nicht die Möglichkeit, eine DLL sozusagen pauschal einzubinden und wenn der Verweis gesetzt ist dann mit der Intellisense auf deren Methoden und Eigenschaften zuzugreifen?

    Bin für Erklärungen und Links, die das für Amateure verständlich darstellen sehr dankbar.

    Vielen Dank

    TH

    Wednesday, July 17, 2013 9:09 PM

Answers

    1. Nein, das geht nicht.
    2. LIB-Dateien sind für Programmiersprachen wie C++ wichtig, damit die entsprechenden Methoden etc. zu Entwicklungszeit gefunden werden. .NET-Programmiersprachen können das direkt den Assemblies (DLL, EXE) entnehmen.
    3. Da du unter VB.NET arbeitest, solltest du DllImport nutzen. Eigentlich ist Declare nichts anderes, kommt aber noch aus dem alten VB.
    4. COM-Methoden sind die Methoden in den unmanaged Assemblies. COM-Schnittstellen sind die Schnittstellen in den besagten Dateien.
      Unterscheiden tun sich diese teilweise von .NET, zugreifen und benutzen sollte aber immer möglich sein.

    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Friday, July 19, 2013 3:05 PM

All replies

  • Hallo, in VB.NET kannst du jede Assembly als Verweis setzen, die auch in einer .NET-Sprache geschrieben wurde (C#, VB.NET, F#, C++/CLI...), also letzten Endes IL Code enthält. Diesen kann VS dann "auslesen" und entsprechend die IntelliSense-Informationen zusammen suchen.

    Bei nativen DLL's (C++, ...) geht das nicht so einfach. Diese enthalten direkte Maschinenbefehle, also die, die die CPU ausführt. Der IL-Code dagegen wird zur Laufzeit erst in Madchinencode übersetzt.

    Ein paar weitere Infos und Links gibts auf Stackoverflow:
    http://stackoverflow.com/questions/3321957/why-use-dllimport-attribute-as-apposed-to-adding-a-reference

    Die Funktionen solcher DLL's kannst du aber trotzdem nutzen. Deklariere diese dazu entsprechend und gib ihr das DllImport-Attribut. Ein Beispiels (C#) gibt es in der Antwort folgender Frage:
    http://social.msdn.microsoft.com/Forums/vstudio/de-DE/58c3643f-2055-40e9-bf66-382edc704317/dllimport-attribute-in-c
    In VB.NET sieht das Beispiel so aus:

    <DllImport("user32.dll", EntryPoint := "FindWindow", CharSet := CharSet.UNICODE)> _
    Public Shared Function MyFindWindow(_WindowClassName As String, _WindowName As String) As Integer
    End Function
    Jetzt nochmal etwas deutsches, wo gezeigt wird wie Win32, COM und .NET zusammen arbeiten können:

    http://www.microsoft.com/germany/msdn/library/net/SoArbeitetNETMitWin32UndCOMZusammen.aspx
    Falls du Probleme mit dem C#-Code hast, in meiner Signatur steht ein meistens gut funktionierender Konverter zwischen C# und VB.NET.

    Wie du sicherlich merken wirst, sind die "guten, alten" DLL's nicht so schön einfach zu benutzen wie die neuen .NET's. Aber selbst bei C++ ist das einbinden einer nativen DLL nicht so schön einfach wie beim .NET System gestaltet.

    Der DLL direkt einfach so ansehen, ob diese als .NET-Verweis dienen kann, kann man nicht. Das einfachste dürfte sein die Datei als Verweis hinzufügen zu wollen, wenn es geht, das ist die Datei .NET kompatibel, ansonsten nicht.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Wednesday, July 17, 2013 9:27 PM
  • Hallo,

    ob eine DLL in einer .NET-Sprache geschrieben wurde, kannst Du mit dem .NET Reflektor überprüfen. Lade dir die Trial-Version herunter und lade die DLL. Wenn diese angezeigt wird, ist sie eine .NET DLL ansonsten nicht.

    Gruss,

    LBB

    Thursday, July 18, 2013 1:12 PM
  • Anstelle von .NET Reflector kann man auch das kostenlose dotPeek nutzen:
    http://www.jetbrains.com/decompiler/

    Das kann zwar nicht .NET Assemblies öffnen, diese haben dann aber keine Unter-Bäume:


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Thursday, July 18, 2013 4:05 PM
  • Vielen Dank Tom für diese lange Hilfe.
    Hab schonmal begonnen bischen rumzuschmökern und werde mich weiter reinarbeiten.

    Auf paar Fragen bin ich noch gestoßen...

    1. kann man auch in VB.Net unmanaged DLLs erstellen?

    2. Manchmal finde ich .lib-files zu DLLs. Wozu sind die da?

    3. scheints ist es (fast) das gleiche, ob ich mit DLLImport oder mit Declare (wie in VB6) importiere, siehe Leanns Beitrag

    4. Ich les immer mal was von com-Methoden/Schnittstellen. Hat das auch was mit den dlls zu tun?


    Thursday, July 18, 2013 9:57 PM
    1. Nein, das geht nicht.
    2. LIB-Dateien sind für Programmiersprachen wie C++ wichtig, damit die entsprechenden Methoden etc. zu Entwicklungszeit gefunden werden. .NET-Programmiersprachen können das direkt den Assemblies (DLL, EXE) entnehmen.
    3. Da du unter VB.NET arbeitest, solltest du DllImport nutzen. Eigentlich ist Declare nichts anderes, kommt aber noch aus dem alten VB.
    4. COM-Methoden sind die Methoden in den unmanaged Assemblies. COM-Schnittstellen sind die Schnittstellen in den besagten Dateien.
      Unterscheiden tun sich diese teilweise von .NET, zugreifen und benutzen sollte aber immer möglich sein.

    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Friday, July 19, 2013 3:05 PM