Имам някакъв код за комуникация с хардуерно устройство на Windows, което работи на C++. Кодът прави нещо доста просто, за да реагира на натискане на бутон на устройството и имам това, компилирано в dll с наблюдател, който се извиква при натискане на бутона. Сега трябва да свържа това с голяма Java програма.
Възнамерявах да използвам JNA, но работи само със C и не мога да видя как да направя това с модел Observer в C. Разгледах използването на BridJ и SWIG (и двата от които могат да работят върху C++ DLL), за да създам интерфейс към компилираната dll (със свързания заглавен файл), но BridJ създава огромни количества файлове (в JNAeratorStudio) и след това спира с грешка и не виждам как да започна на Windows с SWIG (използвам по-скоро Visual Studio Express отколкото пълното Visual Studio).
Някой знае ли за урок за интегриране на C++ DLL с Java програма - SWIG изглежда доста обещаващо, но уроците са "блатисти".
Поставих малко прост C код за комуникация с DLL по-долу:
#include <iostream>
#include <stdio.h>
#include "DeepFocusControlDll.h"
using namespace std;
using namespace DeepFocusControl;
class MyObserver : public DeepFocusControl::DeepFocusObserver{
void Event(){
printf("***Button Pushed***");
}
};
int main()
{
DeepFocusControl::AVA6Control* dfc = new DeepFocusControl::AVA6Control();
MyObserver* observer = new MyObserver();
dfc->AddObserver(observer);
bool connected = dfc->IsConnected();
printf("Connected %s\n", (connected)?"true":"false");
bool connectresult = dfc->Connect();
printf("Connecting %s\n", (connectresult)?"true":"false");
connected = dfc->IsConnected();
printf("Connected %s\n", (connected)?"true":"false");
dfc->SetHardwareAppLaunch(false);
char waitChar;
cin >> waitChar;
dfc->SetHardwareAppLaunch(true);
dfc->RemoveObserver(observer);
dfc->Disconnect();
printf("Disconnected\n");
cin >> waitChar;
}
Ако някой знае по-прост начин за използване на модел на наблюдател за това, с радост мога да прекодирам и страната C.