Как использовать Microsoft :: DirectX :: AudioVideoPlayback для воспроизведения аудио?

Я пишу простой музыкальный проигрыватель, и мне нужно иметь возможность приостанавливать музыку, поэтому я пытаюсь использовать Microsoft :: DirectX :: AudioVideoPlayback API, чтобы сделать это, так как PlaySound не поддерживает эту функцию. Однако программа продолжает вызывать точку останова и выдавать исключение.

Поэтому я создал новый пустой проект Visual C ++ CLR Empty с пустой формой и добавил код только для инициализации нового аудиообъекта и воспроизведения аудиофайла, и я все еще получаю то же исключение. Строка, в которой возникает проблема, является строкой, в которой создается новый экземпляр аудиообъекта.

Я не очень разбираюсь в Visual Studio и никогда раньше не использовал этот API. Я добавил в проект ссылки на файлы Microsoft :: DirectX и Microsoft :: DirectX :: 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
};
}

0

Решение

Я получил следующую ошибку:

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.

Пройдя несколько вопросов и ответов по stackoverflow, я понял, как решить проблему.

  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 у вас есть, щелкнув правой кнопкой мыши по проекту в Solution Explorer -> Properties, затем в Configuration Properties -> General. Вы должны увидеть это в Project Defaults -> .NET Target Framework Version.

0

Другие решения

Других решений пока нет …