我正在尝试将本地项目中的一些jar嵌入我的Xamarin Android应用中,并且遇到了两个单独的(但我怀疑是相关的)问题:
类型或名称空间名称'ICallback'在名称空间'Com.Sun.Jna'中不存在(您是否缺少程序集引用?]
生成的代码如下:
[Register ("getCallback", "(Ljava/lang/Class;Lcom/sun/jna/Pointer;)Lcom/sun/jna/Callback;", "")]
public static unsafe global::Com.Sun.Jna.ICallback GetCallback (global::Java.Lang.Class type, global::Com.Sun.Jna.Pointer p)
{
if (id_getCallback_Ljava_lang_Class_Lcom_sun_jna_Pointer_ == IntPtr.Zero)
id_getCallback_Ljava_lang_Class_Lcom_sun_jna_Pointer_ = JNIEnv.GetStaticMethodID (class_ref, "getCallback", "(Ljava/lang/Class;Lcom/sun/jna/Pointer;)Lcom/sun/jna/Callback;");
try {
JValue* __args = stackalloc JValue [2];
__args [0] = new JValue (type);
__args [1] = new JValue (p);
global::Com.Sun.Jna.ICallback __ret = global::Java.Lang.Object.GetObject<global::Com.Sun.Jna.ICallback> (JNIEnv.CallStaticObjectMethod (class_ref, id_getCallback_Ljava_lang_Class_Lcom_sun_jna_Pointer_, __args), JniHandleOwnership.TransferLocalRef);
return __ret;
} finally {
}
}
我还尝试从https://github.com/java-native-access/jna下载最新版本jna-4.4.0.jar,但这会产生相同的错误。
'Version'未实现接口成员'IComparable.CompareTo(Object)'
[我已经尝试按照Xamarin文档来解决此问题,并通过将以下行添加到我的绑定项目中的cs
文件中来使用生成的metadata.xml
文件中的注释:
<attr path="/api/package[@name='com.innovatrics.iface']/class[@name='Version']/method[@name='compareTo'
and count(parameter)=1
and parameter[1][@type='com.innovatrics.iface.Version']]"
name="managedType">Java.Lang.Object</attr>
但是这似乎根本没有效果。
在这种情况下,您是否尝试过更改类名?
尝试在Metadata.xml
文件中添加以下内容(未经测试):
<attr path="/api/package[@name='com.sun.jna']/interface[@name='Callback']" name="name">ICallback</attr>
这会将接口名称从Java中的Callback
更改为C#中的ICallback
使用上面的重命名方法,我能够克服这个问题,但是在尝试绑定JNA Jar文件时发现了更多错误。
我想知道,您获得了多少,如果可能的话,可以共享允许您完成此绑定的Metadata.xml文件吗?