Julius API を使用して、音声認識用に C++ でインターフェイス クラスを作成します。http://julius.sourceforge.jp/en_index.php?q=index-en.html .
さて、私のクラスにはいくつかのイベントがあり、これらのイベントは Julius API によってトリガーされます。Julius API には、このシグネチャを持つ関数呼び出し callback_add があります。
int callback_add (Recog *recog, int code, void(*func)(Recog *recog, void *data), void data)
いくつかの「プロキシ」関数を使用してイベントを呼び出し、この関数を callback_add に渡します。
プロパティ イベントが静的である場合は正常に動作しますが、非静的である場合、プロキシ関数内でプロパティが認識されません。
難しいのは、callback_add 関数を使用する必要があり、これを変更できないためです。
2 つのイベント (静的および非静的) を持つクラスの概要を次に示します。
ヘッダ
#ifndef FALAENGINE_H_
#define FALAENGINE_H_
#pragma once
extern "C"{
#include <julius/julius.h>
}
namespace FalaAPI {
public ref class FalaEngine
{
public:
FalaEngine();
~FalaEngine();
// Events
delegate void OnRecognizedDele(FalaAPI::RecoResult^ result);
static property OnRecognizedDele^ OnRecognized;
delegate void OnEngineStartDele();
property OnEngineStartDele^ OnEngineStart;
private:
Recog *recog;
Jconf *jconf;
};
}
#endif /* FALAENGINE_H_*/
ソース
#include "stdafx.h"
using System::String;
using System::Console;
#include "FalaEngine.h"
#include <windows.h>
namespace FalaAPI{
void StartOnEngineStart()(Recog *recog, void * dummy){
if(FalaEngine::OnEngineStart->GetInvocationList()->Length > 0)
FalaEngine::OnEngineStart->Invoke();
}
void StartOnRecognized()(Recog *recog, void * dummy){
if(FalaEngine::OnRecognized->GetInvocationList()->Length > 0)
FalaEngine::OnRecognized->Invoke();
}
FalaEngine::FalaEngine(){
recog = j_recog_new();
jconf = j_jconf_new();
//Julius callback Functions
callback_add(recog, CALLBACK_EVENT_PROCESS_ONLINE, StartOnEngineStart, NULL);
callback_add(recog, CALLBACK_RESULT, StartOnRecognized, NULL);
}
}
StartOnEngineStart 関数内で問題が発生します。
エラー C2227: '->GetInvocationList' の左側は、class/struct/union/generic 型を指している必要があります