Ir para conteúdo
Fórum Script Brasil

fabioravila

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que fabioravila postou

  1. 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.
×
×
  • Criar Novo...