winmm.dll wurde nicht gefunden

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    winmm.dll wurde nicht gefunden

    Guten Tag,

    ich habe in meinem Programm Funktionen der winmm.dll.
    Das Programm läuft jedoch nur unter Windows 10. Auf Windows 7 findet er die DLL nicht.
    Ich liefere die DLL im Programmordner mit.

    Folgendermaßen rufe ich die winmm.dll auf (als Beispiel):

    VB.NET-Quellcode

    1. Public Declare Function waveInAddBuffer Lib "winmm.dll" (ByVal hWaveOut As IntPtr, ByVal lpWaveOutHdr As IntPtr, ByVal uSize As Integer) As Integer


    Wie bekomme ich das Programm dazu, die DLL aus dem Programmordner zu laden?

    Danke schon mal für eure Hilfe.

    Mit freundlichen Grüßen
    @GERFreefighter Ist das eine .NET-Assembly? Dann kannst Du sie Deinem Projekt als Verweis hinzufügen.
    Ansonsten müsste das Programm sie neben der Exe finden.
    In welchem Kontext rufst Du diese Funktion auf?
    Kann es sein, dass Du das aktuelle Verzeichnis verändert hast?
    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!
    Das ist eine C++-Assembly (?) Es lässt sich auf jeden Fall nicht als Verweis hinzufügen (Es konnte kein Verweis auf xx hinzugefügt werden).
    Auf Windows 10-Rechnern (2 getestet) findet er sie. Auf Windows 7-Rechnern (2 getestet) nicht.
    Das Ganze steht in einem Namespace, der im Hauptprogramm importiert wird.
    Inwiefern verändert? Ich habe an den Standard-Einstellungen, die beim Anlagen des Projektes eingestellt werden, fast nichts verändert. Lediglich die Framework-Version auf 4.0 gestellt.

    MfG

    GERFreefighter schrieb:

    Das ist eine C++-Assembly
    Also eine schnöde DLL, keine Assembly.
    Wenn das 64 Bit ist, ist denn das W7 auch 64 Bit-System?
    Hast Du ggf. eine 32-Bit-Version dieser DLL bei der Hand?
    Wie ist Dein Programm compiliert - AnyCPU oder x64?
    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!

    GERFreefighter schrieb:

    Ich habe die DLL in folgende Ordner gepackt
    Das ist die falsche Herangehensweise.
    Die obj-Verzeichnisse sind "Zwischenlager", da brauchst Du gar nix reinzupacken.
    Füge Deinem Projekt ein Verzeichnis DLLs hinzu.
    Da packst Du alle DLLs rein, die benötigt werden.
    Die Assemblies unter diesen DLLs fügst Du als Verweis Deinem Projekt hinzu.
    Allen anderen DLLs gibst Du die Eigenschaft Kopieren wenn neuer.
    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!

    GERFreefighter schrieb:

    Public Declare Function
    Außerdem: Bitte verwende nicht die alte VB6 Deklaration. Dafür hat MS das wunderschöne Attribut DllImport erfunde;D

    VB.NET-Quellcode

    1. <DllImport("winmm.dll")>
    2. Public Shared Function waveInAddBuffer(
    3. hWaveOut As IntPtr,
    4. lpWaveOutHdr As IntPtr,
    5. uSize As Integer
    6. ) As Integer

    Hat den Vorteil, dass du nicht nur einfacher und lesbarer die Funktion anders bennen kannst, sondern sich dir auch die Möglichkeiten bieten den Aufruf bzw die CallingConvention festzulegen (ist bei manchen nativen Funktionen notwendig)
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell