0
다음 함수를 제공하는 C++ DLL이 있습니다. 이 함수는 즉시 콜백 함수 (GetProperty
)를 호출합니다. 나는이 DLL의이 기능에 액세스 할 수 com.sun.jna를 사용하는 C# 응용 프로그램이있는 C++ DLLJava 네이티브 float 포인터로 콜백 함수에 액세스
// c++
DllExport unsigned int RegisterCallbackGetPropertyReal(bool (*GetProperty)(UINT property_identifer, float * value)) ;
을 변경할 수 없습니다. 나는 콜백 함수가 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와 함께 자바에서 부동 포인터 값을 설정합니까?