2017-06-09 3 views
0

J'écris un lecteur de musique simple et je dois pouvoir mettre en pause la musique ainsi j'essaye d'employer l'API de Microsoft :: DirectX :: AudioVideoPlayback pour faire ceci puisque PlaySound ne supporte pas cette fonctionnalité. Cependant, le programme continue de déclencher un point d'arrêt et de lancer une exception.Comment utiliser Microsoft :: DirectX :: AudioVideoPlayback pour lire de l'audio?

J'ai donc créé un nouveau projet Vide Visual C++ vide vide avec un formulaire vide et ajouté seulement le code pour initialiser un nouvel objet audio et lire un fichier audio et je reçois toujours la même exception. La ligne sur laquelle le problème se produit est la ligne où la nouvelle instance de l'objet audio est créée.

Je ne suis pas très expérimenté avec Visual Studio et je n'ai jamais utilisé cette API auparavant. J'ai ajouté des références aux fichiers Microsoft :: DirectX et Microsoft :: DirectX :: AudioVideoPlayback .dll au projet, le fichier audio est dans le répertoire. J'ai essayé quelques choses que j'ai trouvées en ligne mais rien n'a fonctionné. Toute aide serait grandement appréciée!

Voici le fichier myForm.h:

#pragma once 

namespace Project3 { 

using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 
using namespace Microsoft::DirectX::AudioVideoPlayback; 

/// <summary> 
/// Summary for MyForm 
/// </summary> 
public ref class MyForm : public System::Windows::Forms::Form 
{ 
public: 
    MyForm(void) 
    { 
     InitializeComponent(); 
     // 
     //TODO: Add the constructor code here 
     // 
    } 

protected: 
    /// <summary> 
    /// Clean up any resources being used. 
    /// </summary> 
    ~MyForm() 
    { 
     if (components) 
     { 
      delete components; 
     } 
    } 

private: 
    /// <summary> 
    /// Required designer variable. 
    /// </summary> 
    System::ComponentModel::Container ^components; 

#pragma region Windows Form Designer generated code 
    /// <summary> 
    /// Required method for Designer support - do not modify 
    /// the contents of this method with the code editor. 
    /// </summary> 
    void InitializeComponent(void) 
    { 
     this->components = gcnew System::ComponentModel::Container(); 
     this->Size = System::Drawing::Size(300,300); 
     this->Text = L"MyForm"; 
     this->Padding = System::Windows::Forms::Padding(0); 
     this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 

     Audio^ myAudio; 

     myAudio = gcnew Audio("Carl Grimes - Carl Poppa.wav", false); 
     myAudio->Play(); 

    } 
#pragma endregion 
}; 
} 

Répondre

0

L'erreur que je recevais était la suivante:

An unhandled exception of type 'System.IO.FileLoadException' occurred in 
System.Windows.Forms.dll 

Additional information: Mixed mode assembly is built against version 
'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without 
additional configuration information. 

Après avoir traversé plusieurs questions et réponses sur stackoverflow je me suis dit comment résoudre le problème .

  1. Créez un fichier .config et placez-le dans le dossier où se trouve le fichier .exe.
  2. Nom du fichier .config quel que soit votre fichier .exe est nommé, y compris l'extension (par exemple MusicPlayer.exe et MusicPlayer.exe.config)
  3. Collez le code suivant dans le fichier .config

    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
        <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
        </startup> 
    </configuration> 
    

    Vous pouvez vérifier quelle version de .NETFramework vous avez en cliquant droit sur le projet dans l'Explorateur de solutions -> Propriétés, puis dans Propriétés de configuration -> Général. vous devriez le voir sous Project Defaults -> .NET Framework Framework Version.