我有一些代码可以与 Windows 上使用 C++ 工作的硬件设备通信。代码做了一些非常简单的事情来对设备上的按钮做出反应,我将它编译成一个带有观察者的 dll,当按钮被按下时调用该观察者。我现在需要将它与一个大型 Java 程序连接起来。
我打算使用 JNA,但它只适用于 C,我看不到如何使用 C 中的观察者模式来做到这一点。我研究过使用 BridJ 和 SWIG(这两个 cliam 都可以在 C++ DLL 上工作)来创建一个与已编译 dll 的接口(带有关联的头文件),但 BridJ 创建了大量文件(在 JNAeratorStudio 中),然后因错误而停止,我看不到如何使用 SWIG 在 Windows 上开始(我使用的是 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 端。