Шлем Epoc Emotiv.

Oleg27

New member
17.11.2013
1
0
#1
Здравствуйте, нужна помощь в разработке приложения для шлема. В течении нескольких дней не получается переписать код в 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); в метаданных отсутствует соглашение о вызовах


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

rrrFer

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