如何使用Microsoft::D irectX::AudioVideoPlayback 来播放音频



我正在编写一个简单的音乐播放器,我需要能够暂停音乐,所以我尝试使用 Microsoft::D irectX::AudioVideoPlayback API 来执行此操作,因为 PlaySound 不支持该功能。但是,程序不断触发断点并引发异常。

所以我创建了一个新的空 Visual C++ CLR 空项目,只有一个空窗体,只添加了初始化新音频对象和播放音频文件的代码,但我仍然收到相同的异常。出现问题的行是创建音频对象新实例的行。

我对Visual Studio不是很有经验,以前也从未使用过这个API。我在项目中添加了对Microsoft::D irectX和Microsoft::D irectX::AudioVideoPlayback .dll文件的引用,音频文件位于目录中。我尝试了一些我在网上找到的东西,但没有任何效果。任何帮助将不胜感激!

这是 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
};
}

我得到的错误如下:

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.

在经历了堆栈溢出的几个问题和答案后,我想出了如何解决这个问题。

  1. 创建一个 .config 文件并将其放在.exe文件所在的文件夹中。
  2. 将 .config 文件命名为.exe文件,无论您的文件命名,包括扩展名(例如 MusicPlayer.exe 和 MusicPlayer.exe.config(
  3. 将以下代码粘贴到 .config 文件中

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

    您可以检查 的版本。通过右键单击"解决方案资源管理器"->"属性"中的项目,然后在"配置属性"-"常规"中右键单击该项目>即可获得 NETFramework。应在"项目默认值"->".NET 目标框架版本"下看到它。

相关内容

  • 没有找到相关文章

最新更新