老师们,您好,我通过COM接口,过滤掉MeshHeader元素后,将其转化为NET下的Element后(变量名为 mElem),通过调试,验证其ElementType为MeshHeader,然后将MeshHeaderElement ms = mElem as MeshHeaderElement;发现ms的值为null,想请问下这是什么原因呢?
在MS或ORD的开发中,我们会面对三种不同类型的对象:COM中的对象(本来为VBA所用,也能被C#所用)、.NET下的托管空间中的对象(C#用)、非托管空间中的对象(C++用)。这三种对象的转换都是非常复杂的,不能用简单的as强制转换的。请学习如下文章:
第8章、在Addins中调用C/C++函数
第9章、用C++/CLI编写Addins
Answer Verified By: cao li
符老师,端午好,可否告知我方式呢,我对C++不是很熟悉
如果是已经存在于DGN文件中的现有元素,最简单的方法是,在COM中获得其ElementID,在.NET中通过该ElementID重新读一下这个元素。反正是两片独立的内存区域,这样的方法并没有浪费资源。我们在编程中应该尽量避免同时在一个函数中调用多个对象模型,从而就能避免这类复杂的转换。
比如,在.NET编程中也是可以过滤元素的呀,为何非要到COM中去过滤元素?
符老师,您好,很抱歉现在才回复您,现在元素尚未加入到模型空间中,请问有什么办法可以转换呢?
我已经在NET中过滤了,但在其他地方也遇到了同样的问题。