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 #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_*/
Source
#include "stdafx.h"
using System::String;
using System::Console;
#include "FalaEngine.h"
#include <windows.h>
namespace FalaAPI{
//Sub função qeu invoça o evento OnENgineStart
void StartOnEngineStart()(Recog *recog, void * dummy){
if(FalaEngine::OnEngineStart->GetInvocationList()->Length > 0)
FalaEngine::OnEngineStart->Invoke();
}
//Sub função qeu invoça o evento OnRecognized
void StartOnRecognized()(Recog *recog, void * dummy){
if(FalaEngine::OnRecognized->GetInvocationList()->Length > 0)
FalaEngine::OnRecognized->Invoke();
}
//Contrutor Padrão (Aloca memoria, inicia os componentes e callback)
FalaEngine::FalaEngine(){
recog = j_recog_new();
jconf = j_jconf_new();
//Atribuição de callback
callback_add(recog, CALLBACK_EVENT_PROCESS_ONLINE, StartOnEngineStart, NULL);
callback_add(recog, CALLBACK_RESULT, StartOnRecognized, NULL);
}
} 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. Tambem agradeço desde já qualquer ajuda.