我在 C++ 中创建了一个用于语音识别的接口类,我正在使用 Julius API。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”左侧必须指向类/结构/联合/通用类型