我有一个 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 中正确设置浮点指针值?