如何从jna引用指针检索java类
在我们用jna创建了binding之后,我正在将openvr sample移植到jogl
几乎在结束之前(在渲染控制器和跟踪基站之前),我试图从C++中的引用指针检索java中的模型类。p>
C++代码here:
while ( 1 )
{
error = vr::VRRenderModels()->LoadRenderModel_Async( pchRenderModelName, &pModel );
if ( error != vr::VRRenderModelError_Loading )
break;
ThreadSleep( 1 );
}
{
/** Loads and returns a render model for use in the application. pchRenderModelName should be a render model name
* from the Prop_RenderModelName_String property or an absolute path name to a render model on disk.
*
* The resulting render model is valid until VR_Shutdown() is called or until FreeRenderModel() is called. When the
* application is finished with the render model it should call FreeRenderModel() to free the memory associated
* with the model.
*
* The method returns VRRenderModelError_Loading while the render model is still being loaded.
* The method returns VRRenderModelError_None once loaded successfully, otherwise will return an error. */
virtual EVRRenderModelError LoadRenderModel_Async( const char *pchRenderModelName, RenderModel_t **ppRenderModel ) = 0;
jna将其翻译为(here):
public interface LoadRenderModel_Async_callback extends Callback {
int apply(Pointer pchRenderModelName, PointerByReference ppRenderModel);
};
在java上,我试图以这种方式加载模型(here):
int error;
PointerByReference modelPtrRef = new PointerByReference();
while (true) {
Pointer stringPointer = new Memory(modelName.length());
error = renderModels.LoadRenderModel_Async.apply(stringPointer, modelPtrRef);
if (error != VR.EVRRenderModelError.VRRenderModelError_Loading) {
break;
}
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
Logger.getLogger(ModelsRender.class.getName()).log(Level.SEVERE, null, ex);
}
}
RenderModel_t m = new RenderModel_t(modelPtrRef.getValue());
m.read();
<^ >但是^ {CD2>}是空的,即^ {< CD3>}是空的,^ {< CD4>}是0,C++上有有效的值代替…<>如何从C++中的引用指针检索java类?
# 1 楼答案
解决后,我需要创建一个指针
modelPtr
,然后创建一个指向指针modelPtrPtr
的指针,并将其传递给LoadRenderModel_Async
最后,我通过将指针的值传递给指针和
read()
来实例化一个模型类,以从本机内存检索值到堆内存:# 2 楼答案
这里有一点简单: