Mac64位cocoa环境下如何获取SET控件的句柄?
How to get the handle of SWT control in Mac 64 bit cocoa enviornment?
我有一个基于 Eclipse 的 RCP 应用程序,我需要在其中将 SWT 控制句柄传递给本机代码以在其上绘制一些东西。
我有以下代码来获取任何 SWT 控件的句柄:
public static int getControlHandle(Control c){
int handle = 0;
try {
if(_isMACOS){
if(_viewField== null)
_viewField = Control.class.getDeclaredField("view");
Object view = _viewField.get(c);
if(_idField== null) {
Class<?>idClass = Class.forName("org.eclipse.swt.internal.cocoa.id");
_idField = idClass.getDeclaredField("id");
}
handle = _idField.getInt(view);
}
else {
if(_idField== null)
_idField = Control.class.getDeclaredField("handle");
handle = _idField.getInt(c);
}
}
catch(Exception e){
}
return handle;
}
_viewField
和 _idField
是 java.lang.reflect.Field
。
虽然这适用于 Windows 和 Mac 32 位,但不适用于 Mac 64 位 cocoa 库和环境。
获取 64 位句柄的方式是否有任何变化Mac?
在 Cocoa 64 位上,id
值是 long
而不是 int
我有一个基于 Eclipse 的 RCP 应用程序,我需要在其中将 SWT 控制句柄传递给本机代码以在其上绘制一些东西。 我有以下代码来获取任何 SWT 控件的句柄:
public static int getControlHandle(Control c){
int handle = 0;
try {
if(_isMACOS){
if(_viewField== null)
_viewField = Control.class.getDeclaredField("view");
Object view = _viewField.get(c);
if(_idField== null) {
Class<?>idClass = Class.forName("org.eclipse.swt.internal.cocoa.id");
_idField = idClass.getDeclaredField("id");
}
handle = _idField.getInt(view);
}
else {
if(_idField== null)
_idField = Control.class.getDeclaredField("handle");
handle = _idField.getInt(c);
}
}
catch(Exception e){
}
return handle;
}
_viewField
和 _idField
是 java.lang.reflect.Field
。
虽然这适用于 Windows 和 Mac 32 位,但不适用于 Mac 64 位 cocoa 库和环境。 获取 64 位句柄的方式是否有任何变化Mac?
在 Cocoa 64 位上,id
值是 long
而不是 int