DLLs einkompilieren

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von mersdusud.

    DLLs einkompilieren

    Bei mir funktioniert es leider auch nicht.
    Ich habe die .dll´s in die Resscourcen eingefügt und dann denn Code nach Anleitung reinkopiert (siehe Bild).

    VB.NET-Quellcode

    1. Partial Friend Class MyApplication
    2. Private WithEvents Domaene As AppDomain = AppDomain.CurrentDomain
    3. Private Function Domaene_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles Domaene.AssemblyResolve
    4. If args.Name.Contains("Interop_AccessibilityCplAdminLib") Then
    5. Return System.Reflection.Assembly.Load(My.Resources.Interop_AccessibilityCplAdminLib)
    6. ElseIf args.Name.Contains("Interop_ShockwaveFlashObjects") Then
    7. Return System.Reflection.Assembly.Load(My.Resources.Interop_ShockwaveFlashObjects)
    8. ElseIf args.Name.Contains("IAxInterop_AcroPDFLib") Then
    9. Return System.Reflection.Assembly.Load(My.Resources.AxInterop_AcroPDFLib)
    10. ElseIf args.Name.Contains("AxInterop_ShockwaveFlashObjects") Then
    11. Return System.Reflection.Assembly.Load(My.Resources.AxInterop_ShockwaveFlashObjects)
    12. ElseIf args.Name.Contains("Interop_AcroPDFLib") Then
    13. Return System.Reflection.Assembly.Load(My.Resources.Interop_AcroPDFLib)
    14. Else
    15. Return Nothing
    16. End If
    17. End Function
    18. End Class


    Soblad ich dann aber die .exe-Datei alleine auf den Desktop kopiere, kommt wieder die gewohnte Fehlermeldung (Anhang).

    Wenn ich nun die Unterstriche durch Punkte ersetze, kommt die Fehlermeldung interop sei kein Member von Ressources. Die Datei nimmt er nur mit Unterstrich.

    Bitte um Hilfe

    Vielen Dank, Philipp
    Bilder
    • Unbenannt.jpg

      26,95 kB, 447×208, 192 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „mersdusud“ ()

    @mersdusud Du musst die Unterstriche im Namen noch durch Punkte ersetzen. Vergleiche auch noch den in der Fehlermeldung angegebenen Namen mit dem im Code.

    Nun zum moderativen Teil:
    Füge Code bitte per Code-Tags (für VB.NET ist das [vbnet]Code[/vbnet]) ein und lade Bilder per Anhangsfunktion (erweiterte Antwort/Bearbeitung) hoch. Bitte editiere deinen Beitrag entsprechend!
    Mit freundlichen Grüßen,
    Thunderbolt
    Sobald ich die Unterstriche durch Punkte ersetze, kommt die Fehlermeldung interop sei kein Member von Ressources.
    Außerdem ist in der Auto-Vervollständigung der Name mit Unterstrich drin.
    Ich habe auch bereits versucht nur die roten Unterstriche zu ersetzen, leider funktionierts dann aber auch nicht.
    Das mit den Punkt statt Unterstrich habe ich schon kapiert, nur funktioniert es dann auch nicht. Ich scheine irgendetwas falsch zu machen.
    Leider bin ich ein Anfänger und habe außer einem VB-Grundkurs in der Schule seither nichts mehr damit zu tun gehabt.

    Also folgendes habe ich gemacht: Im Programm diverse Fenster (Acrobat Reader und Flash Player) aufgezogen, die ich mir zuerst bei den Erweiterungen dazugeclickt habe.
    Dann wurden immer 5 .dll-Dateien zusätzlich erstellt.
    Jetzt habe ich die 5 Dateien mit Originalnamen zu den Ressourcen dazugefügt (einfach reingezogen) und folgenden Code in Application Events (Laut erstem Post in diesem Forum) eingefügt.

    VB.NET-Quellcode

    1. Namespace My
    2. Partial Friend Class MyApplication
    3. Private WithEvents Domaene As AppDomain = AppDomain.CurrentDomain
    4. Private Function Domaene_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles Domaene.AssemblyResolve
    5. If args.Name.Contains("Interop.AccessibilityCplAdminLib") Then
    6. Return System.Reflection.Assembly.Load(My.Resources.Interop_AccessibilityCplAdminLib)
    7. ElseIf args.Name.Contains("Interop.ShockwaveFlashObjects") Then
    8. Return System.Reflection.Assembly.Load(My.Resources.Interop_ShockwaveFlashObjects)
    9. ElseIf args.Name.Contains("IAxInterop.AcroPDFLib") Then
    10. Return System.Reflection.Assembly.Load(My.Resources.AxInterop_AcroPDFLib)
    11. ElseIf args.Name.Contains("AxInterop.ShockwaveFlashObjects") Then
    12. Return System.Reflection.Assembly.Load(My.Resources.AxInterop_ShockwaveFlashObjects)
    13. ElseIf args.Name.Contains("Interop.AcroPDFLib") Then
    14. Return System.Reflection.Assembly.Load(My.Resources.Interop_AcroPDFLib)
    15. Else
    16. Return Nothing
    17. End If
    18. End Function
    19. End Class
    20. End Namespace


    Also wie gesagt: In den "" habe ich den Namen mit . und außerhalb mit _
    Wenn ich nun die .exe erstelle und ohne .dll-Dateien öffne funktioniert es nicht.

    Ich hätte auch schon probiert den Dateinamen in den "" mit hinten .dll zu schreiben, aber auch dann ändert sich nichts.

    Habe ich bei meiner Vorgehensweise irgend etwas falsch gemacht?

    Bitte um euchre Hilfe.

    Vielen Dank
    Nein, das fehlt nicht. Die Methode wird nicht nur für fehlendes aufgerufen. Außerdem ist RequestingAssembly Nothing.

    @Te: du musst den Haltepunkt mehr mals ansteuern, bzw. Kannst direkt in die inneren Scopes der If-Anweisung einen setzen, umzu überprüfen, ob alle Assemblys nachgeladen werden.

    Aber mal ne viel wichtigere Frage;: Warum? - Und auch gut möglich, dass es für diese Dlls gar nicht erlaubt ist.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Also mir sagt weder "RequestingAssembly Nothing" was, noch weiß ich wie man "Scopes der If-Anweisung" ansteuert um "Assemblys" nachladen zu lassen. Ich habe, wie bereits gesagt, nicht viel Ahnung von VB (nur einfaches Grundwissen) und möchte für meine Schülerinnen und Schüler ein Infomationsprogramm für Politische Bildung erstellen.

    Warum? Weil eine diese 6 Dateien mit 100%iger Sicherheit bei vielen zu kopieren "vergessen" werden oder manche die dann einfach löschen, weil die ja auch so komische Namen haben. Deshalb möchte ich (natürlich nur wenn das auch legal ist) diese 6 Dateien in einer einzigen zusammen haben.

    1.) kann wo nachlesen welche man legal einkompilieren darf?
    2.) geht das wirklich so kompliziert? Oder habe ich jetzt was mit dem Code falsch gemacht? Ich habs auch bereits mit dem Assebmly Kompressor oder mit IlMerge probiert, nirgends funktioniert es.
    Der Anfangstext war auch nicht an dich gerichtet, sondern viel mehr an den Post vor mir, erst ab "@TE" war an dich gerichtet.

    1. Da woher man diese Dlls bekommt, doch leider steht soetwas in der Regel nicht dabei, deshalb muss müsste man anfragen. Ansonsten sollte man am besten annehmen, dass es illegal ist. (Es wird aber kaum jemanden geben, der es bei direkter Anfrage ablehnt - vorallem wenn es nicht verkauft wird.)

    2. Alles was ich mit dem Scope der If-Anweisungen meinte, waren die Zeilen 6,8, 10, 12, 14, dort sollst du Haltepunkte setzen, und all diese Punkte müssen auch erreicht werden, dann können wir das Problem schonmal eingrenzen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @mersdusud @jvbsl hat Dich mit @TE implizit angesprochen: TE = Thread-Ersteller.
    Wenn ich Du wäre, würde ich mir eine eigene DLL schreiben, mit einer einzigen simplen Funktion, und die würde ich in mein eigenes Programm einbinden, um zunächst den Mechanismus zu testen.
    Da hast Du das technische vom juristischen Problem völlig getrennt, ohne den legalen Pfad zu verlassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dürfte ich das komplette Projekt jemanden zur Verfügung stellen, da ich nun alle Tipps und Tricks versucht habe, aber leider noch immer keine Lösung für die kompillierung der dll-Dateien gefunden habe. Wäre für einen Experten sicherlich in ein paar Sekunden erledigt und mir wäre wahnsinnig geholfen.

    Lg und Danke schonmal.

    mersdusud schrieb:

    das komplette Projek
    Mach ein kleines Testprojekt, das Deinen Effekt zeigt und häng das als ZIP-File hier dran.
    erweiterte Antwort => Dateianhänge
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe nun ein Testprogramm erstellt, bei dem es anstatt 5 nur 4 .dll-Erweiterungsdateien gibt. Müsste aber das selbe Prinzip sein.
    Vlt findet jemand den Fehler heraus, würde mir wirklich wahnsinnig weiterhelfen. Eine sache ist aber beim Testprogramm anders: Und zwar wird beim Öffnen der .exe-Datei im Testprogramm eine andere Fehlermeldung als beim Hauptprogramm angezeigt (Meldung im Anhang).

    LG., Philipp
    Bilder
    • Fehler Hauptprogramm.jpg

      28,02 kB, 452×212, 150 mal angesehen
    • Fehler Testprogramm.jpg

      15,46 kB, 368×180, 143 mal angesehen
    Dateien
    • Testprogramm.rar

      (3,21 MB, 122 mal heruntergeladen, zuletzt: )