2012-11-17 2 views
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와 함께 자바에서 부동 포인터 값을 설정합니까?

답변

0

아무도 찾을 수없는 오타입니다. 기본적으로 콜백에서 false를 반환하면 기본값 0.000f이 사용됩니다.

오류가 발생한 위치를 표시하는 질문을 편집했습니다.

관련 문제