В настоящее время я пытаюсь разработать UWP DLL для синтеза речи, используя пространство имен Windows :: Media :: SpeechSynthesis.Я прочитал эту документацию и страницу Microsoft , посвященную пространству имен.Я пытался реализовать пространство имен в коде.
Заголовочный файл
#pragma once
#include <stdio.h>
#include <string>
#include <iostream>
#include <ppltasks.h>
using namespace Windows::Media::SpeechSynthesis;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::Media::Playback;
namespace SDKTemplate
{
class TextToSpeechDll
{
public:
__declspec( dllexport ) void ttsInitialize();
private:
MediaElement ^media;
};
}
Cpp файл
#include "stdafx.h"
#include "Dll2.h"
using namespace SDKTemplate;
using namespace Platform;
using namespace Concurrency;
void TextToSpeechDll::ttsInitialize()
{
SpeechSynthesizer ^synth = ref new SpeechSynthesizer();
// The object for controlling the speech synthesis engine (voice).
synth = ref new SpeechSynthesizer();
// The string to speak.
String^ text = "Hello World";
// Generate the audio stream from plain text.
task<SpeechSynthesisStream ^> speakTask = create_task( synth->SynthesizeTextToStreamAsync( text ) );
speakTask.then( [this, text]( task<SpeechSynthesisStream^> synthesisStreamTask )
{
SpeechSynthesisStream ^speechStream = synthesisStreamTask.get();
// Send the stream to the media object.
// media === MediaElement XAML object.
media->AutoPlay = true;
media->SetSource( speechStream, speechStream->ContentType );
media->Play();
} );
}
Я могу загрузить файл DLL и функцию Iэкспорт.Однако, когда я пытаюсь вызвать функцию, я получаю следующую ошибку
Я попробовал пример на странице Microsoft , ноЭто как-то не работает, и я не могу понять, почему.Я также протестировал универсальные образцы Windows, доступные на Github , который представляет собой приложение UWP, перегруппировывающее распознавание текста в речь и распознавание речи.
Кто-то испытывал подобную проблему?Разве я не должен использовать элемент XAML, когда у меня нет интерфейса?
Редактировать 1
Я изменил файл заголовка относительноэкспорт функции в соответствии с предложением @ Peter Torr - MSFT
#pragma once
#include <stdio.h>
#include <string>
#include <iostream>
#include <ppltasks.h>
using namespace Windows::Media::SpeechSynthesis;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::Media::Playback;
namespace SDKTemplate
{
public ref class TextToSpeechDll sealed
{
public:
void ttsInitialize();
private:
MediaElement ^media = ref new MediaElement();
};
}
Однако при компиляции я получаю новую ошибку в этой строке
speakTask.then( [this]( task<SpeechSynthesisStream^> synthesisStreamTask )
Я исследовал эту ошибку, и если я правильно ее понял, то это связано с импортом функции DLL.
Кроме того, я вызываю функциюкак это
_ttsUwpDll->ttsInitialize();
Что приводит нас сюда
void NxWindowsTtsUwpDll::ttsInitialize()
{
int retVal = 0;
try
{
retVal = _ttsInitialize();
}
catch( ... )
{
printf( "Exception in ttsInitialize\n" );
}
//return retVal;
}