为了解释这个问题,我想最好解释(简化)我想要做的事情。
有一个设备(相机)。此设备的API由本机DLL提供。此DLL中的一个函数需要一个Native Window Handle来直接在应用程序中绘制捕获的图像。使用C#的解决方案是将PictureBox.Handle
传递给此函数。但是在Java中,绘图组件是awt.Canvas
。此问题的早期实现是获取此Canvas的对等方,自JDK 1.1以来已弃用。此外,我不知道这个apporach是否一直有效。因此,他们有两个问题:
这种弃用的方法真的有效吗?
是否有其他可能的解决办法将窗口句柄传递给DLL?
这是DLL中函数的签名:
int draw_func(..., const void* window,...);
以前这个问题是如何解决的(或者可能不是):
long lhwnd = ((sun.awt.windows.WComponentPeer)._canvasPictureBox.getPeer()).getHWnd();
Pointer HWndPtr = new Pointer(lhwnd );
答案 0 :(得分:2)
JNA提供了一种方法来获取组件的本地对等体Native.getComponentPointer()
,您可以使用该方法从JNA的HANDLE
初始化platform.jar
对象或直接传入。