C++で動作しているWindows上のハードウェアデバイスと通信するためのコードがいくつかあります。このコードは、デバイスのボタンのプッシュに反応するために非常に簡単なことを行います。これを、ボタンが押されたときに呼び出されるオブザーバーを使用してdllにコンパイルします。これを大きなJavaプログラムとインターフェースする必要があります。
JNAを使用するつもりでしたが、Cでのみ機能し、Cのオブザーバーパターンでこれを行う方法がわかりません。BridJとSWIG(どちらもC ++ DLLで動作するcliam)を使用して作成することを検討しました。コンパイルされたdll(関連付けられたヘッダーファイルを含む)へのインターフェイスですが、BridJは(JNAeratorStudioで)大量のファイルを作成し、エラーで停止し、SWIGを使用してWindowsで開始する方法がわかりません(私はむしろVisualStudioExpressを使用しています完全なVisualStudioよりも)。
C ++ DLLとJavaプログラムの統合に関するチュートリアルを知っている人はいますか?SWIGはかなり有望に見えますが、チュートリアルは「沼地」です。
以下のDLLと通信するための簡単なCコードをいくつか配置しました。
#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側も喜んで再コーディングすることができます。