【发布时间】:2017-11-10 07:16:52
【问题描述】:
目前,我正在 Xamarin 中研究 IEGL10。我已经实现了ISurfaceHolderCallback 和SurfaceCreated(ISurfaceHolder holder) 我必须调用这样的方法。
public void SurfaceCreated(ISurfaceHolder holder)
{
mEglSurface = mEgl.EglCreateWindowSurface(mEglDisplay, mEglConfig,
holder, null);
}
问题是,持有者是一个C#接口,而EglCreateWindowSurface需要Java.Lang.Object。那么我该如何进行铸造。如果我直接投像(Java.Lang.Object)holder这样的持有人。它正在抛出无效的强制转换异常。
请帮助我真的被困在这里的人。
【问题讨论】:
-
我对 Xamarin 不够熟悉,无法回答这个问题。但是,如果您所指的
Java.Lang.Object类型是 C# 类型,并且您无法在此处更改实现ISurfaceHolder的类的类型层次结构,那么您将不得不包装holder对象在不同的类型中继承Java.Lang.Object,实现ISurfaceHolder,并将所有接口成员委托给原始holder对象。 -
SurfaceCreated(ISurfaceHolder holder) 是 ISurfaceHolderCallback 的重写方法。所以我不能包装持有人对象。
-
“所以我不能包装持有者对象”——对我来说似乎是不合理的。你的第一句话和第二句话有什么关系?您的帖子暗示 您 编写了
SurfaceCreated()方法并正在调用EglCreateWindowSurface()方法。因此,您可以在将holder对象传递给EglCreateWindowSurface()方法之前访问它,并且可以将其包装在那里。底线:不知何故,你必须想出一个Java.Lang.Object对象才能传递,如果holder不能成为那样,你必须传递其他东西。
标签: c# android xamarin casting