O
Oleg27
Здравствуйте, нужна помощь в разработке приложения для шлема. В течении нескольких дней не получается переписать код в windows forms,пишу в "visual studio2012, С++". Суть, заключается в том что в консольном приложении CLR работает на ура.
пишу в консоли.
Когда пишу в 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); в метаданных отсутствует соглашение о вызовах
Может надо по другому библиотеки подключать ? Отдельным классом реализовать ? Или в консоль можно добавить форму. Идея появилась, консоль парсить, и уже в форме обрабатывать полученные данные.
пишу в консоли.
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;
}
#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); в метаданных отсутствует соглашение о вызовах
Может надо по другому библиотеки подключать ? Отдельным классом реализовать ? Или в консоль можно добавить форму. Идея появилась, консоль парсить, и уже в форме обрабатывать полученные данные.