У меня есть код для связи с аппаратным устройством в Windows, которое работает на C++. Код делает что-то довольно простое, чтобы реагировать на нажатие кнопки на устройстве, и я скомпилировал это в dll с наблюдателем, который вызывается при нажатии кнопки. Теперь мне нужно связать это с большой программой Java.
Я собирался использовать JNA, но он работает только с C, и я не вижу, как это сделать с шаблоном Observer в C. Я изучил использование BridJ и SWIG (оба из которых предназначены для работы с DLL C++) для создания интерфейс к скомпилированной dll (со связанным файлом заголовка), но BridJ создает огромное количество файлов (в JNAeratorStudio), а затем останавливается с ошибкой, и я не вижу, как начать работу в Windows с помощью SWIG (я использую Visual Studio Express, а не чем полная Visual Studio).
Кто-нибудь знает учебник по интеграции DLL C ++ с программой 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.