0

次の関数を公開する 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でフロートポインタ値を正しく設定するにはどうすればよいですか?
4

1 に答える 1

0

これは他の誰も見つけられなかったタイプミスです。基本的に、コールバックで false を返すとGetPropertyReal_fn、デフォルト値0.000fが使用されます。

質問を編集して、エラーの場所を示しました。

于 2012-11-17T00:11:17.490 に答える