Estou desenvolvendo (adaptando) uma classe de interface para reconhecimento de fala em C++/CLI, interface pois toda a logica de reconhecimetno é realizada por uma outra biblioteca chamada Julius http://julius.sourceforge.jp/en_index.php?q=index-en.html
Atraves de sua propria API que disponibiliza várias funcionalidade que estou utilizando para criar minha classe.
Uma das partes da API são as funções de callback, onde posso adicionar funções para serem executadas pela engine da API e certos momentos.
Minha classe disponibiliza alguns eventos, alguns desses eventos são dependentes da execução de um callback pela API.
Abaixo coloco o codigo apenas com poucos métodos para exemplificar meu problema
Header
#ifndef FALAENGINE_H_
#define FALAENGINE_H_
#pragma once
extern "C"{
#include <julius/julius.h>
}
namespace FalaAPI {
public ref class FalaEngine
{
public:
//// Construtor padrão
FalaEngine();
////// Destutor Padrão
~FalaEngine();
// Eventos
////////// Evento executado quando o processo de reconhecimento termina, retornando um recresult
delegate void OnRecognizedDele(FalaAPI::RecoResult^ result);
static property OnRecognizedDele^ OnRecognized;
//// Eventos de Engine
//////// Evento de delegate chamado quando a engine é iniciada CALLBACK_EVENT_PROCESS_ONLINE
delegate void OnEngineStartDele();
property OnEngineStartDele^ OnEngineStart;
private:
//Atributos objetos e handlers
Recog *recog;
Jconf *jconf;
};
}
#endif /* FALAENGINE_H_*/
Bom eu utilizo a função callback_add da API Julius, que possui a seguinte assinatura
int callback_add (Recog *recog, int code, void(*func)(Recog *recog, void *data), void *data)
Como podem ver eu tenho um evento(property) statico e outro não statico.
Tenho uma função intermediaria para cada evento, e esta função e a referenciada no callback_add, fica responsável pro realizar algum processamento no objeto passado e efeutar o Invoke no evento.
O evento statico funciona perfeitamente. Porém o evento não statico eu não consigo fazer fucionar, na verdade nem compila.
Da forma como está o codigo passado que no interior da função intermerdiaria (StartOnEngineStart), ela não reconhece o metodo como evento válido dando o erro:
error C2227: left of '->GetInvocationList' must point to class/struct/union/generic type
Já tentei várias coisas, primeiro colocar a função intermediaria como membro private da classe, mas ao fazer isso esta não consegue ser passada como parametro no call_back add, retornando o seguinte:
error C3867: 'FalaAPI::FalaEngine::StartOnEngineStart': function call missing argument list; use '&FalaAPI::FalaEngine::StartOnEngineStart' to create a pointer to member
Fiz outras tentativas desesperadas, porém só pioraram a situação.
Já procurei no forum, li varias documentações mas estou muito enferrujado em C/C++, pois hoje trabalho com C# e outras linguagens.
Se alguém pudessem me ajudar a solucionar este problema eu agradeço.
Pergunta
fabioravila
Fala pessoal, vamos ao problema
Estou desenvolvendo (adaptando) uma classe de interface para reconhecimento de fala em C++/CLI, interface pois toda a logica de reconhecimetno é realizada por uma outra biblioteca chamada Julius http://julius.sourceforge.jp/en_index.php?q=index-en.html
Atraves de sua propria API que disponibiliza várias funcionalidade que estou utilizando para criar minha classe.
Uma das partes da API são as funções de callback, onde posso adicionar funções para serem executadas pela engine da API e certos momentos.
Minha classe disponibiliza alguns eventos, alguns desses eventos são dependentes da execução de um callback pela API.
Abaixo coloco o codigo apenas com poucos métodos para exemplificar meu problema
Header
SourceBom eu utilizo a função callback_add da API Julius, que possui a seguinte assinatura
int callback_add (Recog *recog, int code, void(*func)(Recog *recog, void *data), void *data)
Como podem ver eu tenho um evento(property) statico e outro não statico.
Tenho uma função intermediaria para cada evento, e esta função e a referenciada no callback_add, fica responsável pro realizar algum processamento no objeto passado e efeutar o Invoke no evento.
O evento statico funciona perfeitamente. Porém o evento não statico eu não consigo fazer fucionar, na verdade nem compila.
Da forma como está o codigo passado que no interior da função intermerdiaria (StartOnEngineStart), ela não reconhece o metodo como evento válido dando o erro:
error C2227: left of '->GetInvocationList' must point to class/struct/union/generic type
Já tentei várias coisas, primeiro colocar a função intermediaria como membro private da classe, mas ao fazer isso esta não consegue ser passada como parametro no call_back add, retornando o seguinte:
error C3867: 'FalaAPI::FalaEngine::StartOnEngineStart': function call missing argument list; use '&FalaAPI::FalaEngine::StartOnEngineStart' to create a pointer to member
Fiz outras tentativas desesperadas, porém só pioraram a situação.
Já procurei no forum, li varias documentações mas estou muito enferrujado em C/C++, pois hoje trabalho com C# e outras linguagens.
Se alguém pudessem me ajudar a solucionar este problema eu agradeço.
Tambem agradeço desde já qualquer ajuda.
Editado por fabioravilaLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.