源代码:
IMoniker moniker;
int hresult = NativeMethods.CreateFileMoniker(kFileName, out moniker);
IBindCtx pbc;
NativeMethods.CreateBindCtx(0, out pbc);
Object obj;
Guid guid = new Guid();
guid = typeof(GraphicsLibrary.IPolyline).GUID;
moniker.BindToObject(pbc, null, guid, out obj);
GraphicsLibrary.IPolyline pl = (GraphicsLibrary.IPolyline)obj;
GraphicsLibrary.PolylineObjClass o = (GraphicsLibrary.PolylineObjClass)pl;
foreach (GraphicsLibrary.PolyPoint ptt in o.Points)
{
Trace.WriteLine(String.Format("point ({0}, {1})", ptt.x, ptt.y));
}
return 0;GraphicsLibrary.PolylineObjClass o = (GraphicsLibrary.PolylineObjClass)pl;上的异常
详细信息:
“System.InvalidCastException”类型的异常发生在DotNetClient.exe中,但未在用户代码中处理
但是我已经实现了IProvideClassInfo接口并注册了类型化。
为什么我不能投出这个物体?
PS:完整的源代码,请参考https://github.com/Jichao/comtut/tree/master/monikers/FileMoniker
发布于 2016-02-22 13:25:12
您的对象是IPolyline的实现,而不是来自PolylineObjClass或PolylineObjClass本身的任何超类。
A实现IPolylineB实现IPolylinemyFirstObj = new B();mySecondObj = (A) myFirstObj; <=失败,因为B可能实现其他方法或属性,A没有,所以不可能进行强制转换mySecondObj = (IPolyline) myFirstObj; <= work,您将强制转换限制在相同的方法范围内。https://stackoverflow.com/questions/35554716
复制相似问题