bass.dll einbinden als Ressource

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Takafusa.

    bass.dll einbinden als Ressource

    Guten Abend allerseits!

    Ich bin gerade dabei meinem Projekt den letzten Feinschliff zu verpassen und würde die bass.dll gerne als Ressource zufügen. Hab ich das also gemacht. Und natürlich die bass.net.dll auch als Verweis zugefügt

    Problem: Wie bekomm ich die bass.dll von den Ressourcen ins Anwendungsverzeichnis, ohne diese manuell da reinzukopieren. Also hab ich Folgendes versucht:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. If System.IO.File.Exists(Anwendungspfad & "\bass.dll") = False Then
    3. System.IO.File.WriteAllBytes(Anwendungspfad & "\bass.dll", My.Resources.bass_library)
    4. End If
    5. Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)
    6. End Sub


    Kommt logischerweise beim Programmstart der Fehler:
    Die Datei "obj\debug\MeinProgramm.exe" kann nicht in "bin\debug\MeinProgramm.exe" kopiert werden. Der Zugriff auf den Pfad "obj\debug\MeinProgramm.exe" wurde verweigert. Weiss jemand vielleicht wie man das Problem lösen kann?

    Als Anwendungspfad hab ich eigentlich keine Variable drin sondern den statischen Pfad \bin\debug\bass.dll als String

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

    @kafffee Was ganz genau ist der Inhalt der Variable Anwendungspfad?
    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!
    OHa.
    Dies hier funktioniert bei mir:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim Anwendungspfad = Application.StartupPath
    3. If System.IO.File.Exists(Anwendungspfad & "\bass.dll") = False Then
    4. System.IO.File.WriteAllBytes(Anwendungspfad & "\bass.dll", My.Resources.Bass)
    5. End If
    6. End Sub
    Sieh Dir den Unterschied an zwischen Application.ExecutablePath und Application.StartupPath, ansonsten gibt es keinen Unterschied.
    Wenn ich die Exe auf den Desktop ziehe, funktioniert es auch.

    Was ist bei Dir anders?
    Und
    Leg Dir ein zentrales Nicht-Desktop-Verzeichnis für Deine Projekte an.
    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!

    RodFromGermany schrieb:

    Dies hier funktioniert bei mir:

    Bei mir nicht...

    RodFromGermany schrieb:

    Wenn ich die Exe auf den Desktop ziehe, funktioniert es auch.

    Das wäre das Allerwichtigste, dass das aussserhalb der Entwicklungsumgebung wenigstens funktioniert. Wie hast du das gemacht? Einfach die *.exe ohne alles aus dem Verzeichnis \bin\debug auf den Desktop kopiert?

    RodFromGermany schrieb:

    Leg Dir ein zentrales Nicht-Desktop-Verzeichnis für Deine Projekte an.

    Hab ich schon, ich arbeite jedoch an einer Sicherungskopie...
    Hi

    Hmm, Du könntest evtl. auf ein Problem mit Virenscannern stoßen wenn Du eine ausführbare Datei (was eine DLL im Endeffekt ja auch ist, kompilierter Code) aus einer anderen ausführbaren Datei heraus auf die Platte schreibst. Die Virenscanner könnten vermuten das Du auf den PC etwas einschleusen möchtest (so verhalten sich zum Teil auch Trojaner, Adware und andere Konsorten dieser Art). Nur mal so worüber Du Dir Gedanken machen solltest.
    Mfg -Franky-
    @-Franky-
    Hast du eine bessere Idee wie ich das bewerkstelligen kann?

    Edit:
    Bin auch gerade dabei ein kleines Testprogramm zu machen mit der bass.dll. Klappt nur nicht: Ich habe die bass.net.dll eingebunden unter Verweise, hab sie importiert, aber wenn ich sie initialisieren will:

    bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle)

    kommt der Fehler:
    "BASS_Init" ist kein Member von "bass"

    Ich werd noch wahnsinnig, was ist da wieder los?

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

    @Takafusa @-Franky-

    Alles klar habs hinbekommen. Bin nur durch Zufall auf die Lösung gekommen. Es lag daran, dass mein Projektname mit "bass." angefangen hat. Mann bin ich froh :)

    Wegen dem Einkompilieren:

    Das mit dem Weitergeben meiner Projekte hab ich noch nicht so ganz verstanden. Hab das bisher über Projekt>Veröffentlichen>Veröffentlichungs-Assistent gemacht, da bei mir das mit dem sogenannten Setup-Project nicht funktioniert. Problem ist dass man bei dem Installationsprogramm, das vom Veröffentlichungsassistent erstellt wird, keinen Installationspfad wählen kann, sondern dass das irgendwo unauffindbar dann installiert wird (zumindest nicht unter "C:\Programme\"). Irgendein ellenlanges Gemisch aus zufälligen Zahlen und Buchstaben ist dann der Installationspfad, und ich hab den nur gefunden, indem ich das Programm mit der Verknüpfung im Startmenü gestartet hab, und dann über den Task-Manager (WIn10) den Pfad der ausgeführten *.exe mir hab anzeigen lassen.
    Das möchte ich dem unerfahrenen User meiner Projekte nicht zumuten. Daher hatte ich die Idee mit den Ressourcen. Das Problem mit dem Virenscanner kann ich u.U. in Kauf nehmen, da mein Projekt sowieso sporadisch in der Quarantäne meines Virenscanners landet, hab ichs einfach vom Virenscan ausgeschlossen. Bisher lag das u.a. daran, dass ich bei MP3-Dateien die Metadaten (und damit auch die Dateien) geändert hab.

    Zur Lösung mit der ZIP:

    Wie mach ich das am besten, einfach das "\bin\debug"-Verzeichnis wie es ist nach "c:\programme" kopieren, Verknüpgung aufs Desktop und fertig? Damit ist es nicht getan, oder doch? Das wär natürlich megacool... 8o

    kafffee schrieb:

    ich arbeite jedoch an einer Sicherungskopie...
    auf dem Desktop?
    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!
    Zu der ZIP-Frage: Ja so machst du das. Im Endeffekt brauchst du nur die .exe und alle von dir eingebundenen Resourcen (in dem Fall die bass.net.dll)
    Bezüglich dem einbetten in die Resourcen: codeproject.com/Articles/52817…LL-From-Embedded-Resource
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Wenn du eine Release-Version erstellt hast, einfach die Exe, DLLs aus dem Release-Ordner in einem Ordner mit dem Programm-Namen packen, diesen Ordner dann Zippen. Wenn User nur auf "Hier entpacken" klicken(zip kontextmenu), haben die auch direkt alles in einem Ordner, anstatt evtl. mit anderen Dateien im selben Ordner gemixt.

    Mit dem Zippen wurde zwar schon erklärt, aber einen Ordner mit den Dateien zu zippen, anstatt nur die Dateien, halte ich für Empfehlenswert.

    kafffee schrieb:

    Was ich wie genau mache?
    So was:

    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!