0

Java 開発者 (C の知識は限られている) であるため、Linux でイメージング デバイス用の SDK を操作する必要があります。

これがシナリオです。デバイス SDK には、Windows (.dll) および Linux (.so) に実装された共有ライブラリがあります。両方の実装の関数の名前とシグネチャは同じですが、両方のリファレンス マニュアルは 1 つしかありません。

これらは、JNI を使用してネイティブ メソッドを呼び出す Java コードを提供します。SDK ライブラリの関数は JNI から直接呼び出すことができないため、JNI から呼び出せるように関数を公開する C コードも SDK に付属しています (基本的には、JNI で生成されたヘッダーの実装です)。 "javah" ツール)。

ここで私の問題は、JNI のような関数を公開するこの C コードが、Windows でテストおよびコンパイルされたベンダーによって提供されていることです。

この時点で、次の gcc コマンドを実行しました。

gcc -shared -o some.so some.c -I/usr/local/jdk1.7.0_40/include -I/usr/local/jdk1.7.0_40/include/linux -I/someSDKpath/Linux/Inc

コンパイラは次のエラーをスローします。

/someSDKpath/Linux/Inc/bioapi_type.h:195: エラー: '*' トークンの前に ')' が必要です

この行は次を参照します。

typedef BioAPI_RETURN (BioAPI *BioAPI_ModuleEventHandler)
    (const BioAPI_UUID *BSPUuid,
    void* AppNotifyCallbackCtx,
    BioAPI_DEVICE_ID DeviceID,
    uint32 Reserved,
    BioAPI_MODULE_EVENT EventType);

そして、この種の型が宣言されるたびにエラーが発生します。

誰かがこのエラーを解決してくれたり、この作業を成功させるためのガイドラインを教えてくれることを願っています.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::

Joniのおかげで、前者の問題を解決できました。

これで、さらに 1 つの (反復的な) エラーが発生しました。

PvsApiJv.c:32: エラー: 'mBioAPI_ModuleLoad' の前に '='、','、';'、'asm' または '<strong>attribute' が必要です</p>

この種のエラーは、次のいずれかの場合にすべての行で生成されます。

static BOOL                         mBioAPI_ModuleLoad;

「int」に変更して、False の代わりに 0 を、True の代わりに 1 を置き換える使用法を見つけることはできますか? :::

INT                                 mRegistScore = 0;

他の変数に「int」以外に「INT」を使用する理由がわかりません。どうすればこれを進めることができますか? :::

extern __declspec(dllimport) BioAPI_RETURN BioAPI BioAPI_ModuleUnload();

「IMPORT」または「attribute ((dllexport))」を使用する必要がありますか? 検索すると、いくつかの推奨事項が見つかりましたが、どれを適用すればよいかわかりません。:::

CRITICAL_SECTION                    mGuiStateCS;

私が知っているこの最後のものは、特定の Windows タイプです。代わりにどの同等物を使用できますか?

4

1 に答える 1