次の関数を公開する C++ DLL があります。この関数は、コールバック関数 ( GetProperty
) をすぐに呼び出します。C++ DLL を変更できません
// c++
DllExport unsigned int RegisterCallbackGetPropertyReal( bool (*GetProperty)( UINT property_identifer, float * value ) ) ;
com.sun.jnaを使用して DLL のこの関数にアクセスする C# アプリケーションがあります。コールバック関数が C++ DLL から正しく呼び出されるようになりましたが、設定する方法を見つけることができません。float * value
// Java
public class main {
public interface CBlargAPI extends Library {
interface GetPropertyReal_t extends Callback {
boolean invoke (int property_identifer, FloatByReference value);
}
int RegisterCallbackGetPropertyReal( GetPropertyReal_t getProperty ) ;
}
public static void main(String[] args) throws Exception
{
// Register call back functions
CBlargAPI.GetPropertyReal_t GetPropertyReal_fn = new CBACnetAPI.GetPropertyReal_t() {
@Override
public boolean invoke(int property_identifer, FloatByReference value) {
System.out.println("GetPropertyReal_t: " ) ;
value.setValue(97.5f);
return false; // [Edit] This is where the problem was. this should be `return true;` See my answer below.
}
};
CBlargAPI.INSTANCE.RegisterCallbackGetPropertyReal( GetPropertyReal_fn ) ;
}
}
私が期待していたのは、c++ DLL に戻ったときに値を 97.5f に設定する必要があるということです。代わりに、デフォルト値の 0.000f を取得します
私の質問は:
- Jnaを使用してJavaでフロートポインタ値を正しく設定するにはどうすればよいですか?