Java Native使用浮点指针访问回调函数

时间:2012-11-17 00:06:43

标签: java callback jna

我有一个C ++ DLL,它公开了以下功能。此函数立即调用回调函数(GetProperty)。我无法更改C ++ DLL

// c++
DllExport unsigned int RegisterCallbackGetPropertyReal( bool (*GetProperty)( UINT property_identifer, float * value ) ) ; 

我有一个C#应用程序,它使用com.sun.jna来访问DLL的这个功能。我已经到了从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中正确设置浮点指针值?

1 个答案:

答案 0 :(得分:0)

这是其他人无法找到的拼写错误。基本上,如果我在GetPropertyReal_fn回调中返回false,则会使用默认值0.000f

我已编辑问题以显示错误的位置。