Шлем Epoc Emotiv.

Тема в разделе "C/C++/C#", создана пользователем Oleg27, 17 ноя 2013.

  1. Oleg27

    Oleg27 New Member

    Регистрация:
    17 ноя 2013
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте, нужна помощь в разработке приложения для шлема. В течении нескольких дней не получается переписать код в windows forms,пишу в "visual studio2012, С++". Суть, заключается в том что в консольном приложении CLR работает на ура.



    пишу в консоли.

    Код (C++):
    #include "stdafx.h"
    #include<iostream>
    #include<conio.h>
    #include "edk.h"
    #include "edkErrorCode.h"
    #include "EmoStateDLL.h"
    #include <list>


    using namespace System;

    #pragma comment(lib, "../lib/edk.lib")

    using namespace std;

    int main(array<System::String ^> ^args)
    {


    EmoEngineEventHandle hEvent = EE_EmoEngineEventCreate();

    EmoStateHandle eState = EE_EmoStateCreate();
    unsigned int userID = -1;
    list<int> listUser;

    if( EE_EngineConnect() == EDK_OK )
    {
    while(!_kbhit())
    {
    int state = EE_EngineGetNextEvent(hEvent);
    if( state == EDK_OK )
    {
    EE_Event_t eventType = EE_EmoEngineEventGetType(hEvent);               
    EE_EmoEngineEventGetUserId(hEvent, &userID);
    if(userID==-1)
    continue;          

    if(eventType == EE_EmoStateUpdated )
    {                              
    // Copies an EmoState returned with a EE_EmoStateUpdate event to memory referenced by an EmoStateHandle.
    if(EE_EmoEngineEventGetEmoState(hEvent,eState)==EDK_OK)
    {
    if(EE_GetUserProfile(userID,hEvent)==EDK_OK)
    {
    //Affective score, short term excitement                       
    cout <<"userID: " << userID <<endl;
    cout <<"    affectiv excitement score: " << ES_AffectivGetExcitementShortTermScore (eState) << endl;
    cout <<"    expressiv smile extent : " << ES_ExpressivGetSmileExtent(eState) <<endl;                           
    }


    }                  

    }
    // userremoved event
    else if( eventType == EE_UserRemoved )
    {
    cout <<"user ID: "<<userID<<" have removed" << endl;   
    listUser.remove(userID);
    }
    // useradded event
    else if(eventType == EE_UserAdded)
    {
    listUser.push_back(userID);
    cout <<"user ID: "<<userID<<" have added" << endl;
    }      
    userID=-1;
    }          
    }
    }

    EE_EngineDisconnect();
    EE_EmoStateFree(eState);
    EE_EmoEngineEventFree(hEvent); 
    return 0;
    }
    Когда пишу в windows forms, библиотеки подключаю таким образом

    #include "edk.h"
    #include "edkErrorCode.h"
    #include "EmoStateDLL.h"
    #pragma comment(lib, "../lib/edk.lib")

    Далее пишу
    EmoEngineEventHandle hEvent ; всё работает нормально , Но стоит присвоить
    hEvent = EE_EmoEngineEventCreate();

    Выходить ошибка
    не удалось создать P или Invoke для "extern "C" void * __clrcall EE_EmoEngineEventCreate(void)" (?EE_EmoEngineEventCreate@@$$J0YMPAXXZ); в метаданных отсутствует соглашение о вызовах


    Может надо по другому библиотеки подключать ? Отдельным классом реализовать ? Или в консоль можно добавить форму. Идея появилась, консоль парсить, и уже в форме обрабатывать полученные данные.
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Я не смогу ответить, WinForms не использую. Больше тут ответить вроде бы некому в настоящее время. ИМХО стоит поискать ответ на других форумах. Или на хэшкоде, например (второй вариант оперативнее должен быть)
     

Поделиться этой страницей