静的 C++ ライブラリ DataPacker.lib があり、Command.dll という共有ダイナミック リンク ライブラリにリンクされているとします。
静的ライブラリは、次の関数を公開します。
//Datapacker.h
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java__Observer_sendToClient
(JNIEnv *, jclass, jobject);
#ifdef __cplusplus
}
#endif
//Datapacker.cpp
JNIEXPORT void JNICALL Java__Observer_sendToClient
(JNIEnv *, jclass, jobject)
{
//Print
}
今、次のようにJavaクラスから上記の関数を呼び出そうとしましたが、
//Observer.Java
class Observer
{
static{
System.loadLibrary("Command");
}
public static void main(String[] args) {
try{
sendToClient();
}
catch (Throwable t){
System.err.println("Native code library failed to load.\n" + t.getMessage());
}
}
private static native void sendToClient();
}
しかし、Javaから次の例外が発生しています。
「ネイティブ コード ライブラリのロードに失敗しました。Observer.sendToClient()V」
DataPacker.lib から command.lib に移動すると、呼び出しは正常に機能します。助けてください。