|
阅读:2280回复:4
VC中如何写if typeof ipav is IPageLayout then
<P>dim ipAV as IActiveView</P>
<P>...</P> <P>if typeof ipav is IPageLayout then </P> <P> ...</P> <P>end if</P> |
|
|
1楼#
发布于:2010-08-10 23:35
Java中有一个instanceof关键字代替VB中的typeof...is ...,VC中用什么代替呢
|
|
|
2楼#
发布于:2010-08-11 23:58
<P>#include <typeinfo.h><BR>#include <atlconv.h></P>
<P> HRESULT hr;<BR> IMxDocumentPtr ipMxDoc;<BR> IMapsPtr ipMaps;<BR> IMapPtr ipMap;<BR> IActiveViewPtr ipAV;<BR> ipMxDoc=m_ipDoc ;<BR> hr=ipMxDoc->get_ActiveView (;ipAV);<BR> USES_CONVERSION;<BR> CLSID iid;<BR> LPOLESTR lpolestrIID;</P> <P> iid=__uuidof(ipAV);</P> <P> //方案一:</P> <P> //IActiveView的IID={dd94d76b-836d-11d0-87ec-080009ec732a}<BR> StringFromIID(iid,;lpolestrIID);<BR> LPCSTR cstrAV=OLE2CT(lpolestrIID);<BR> MessageBox (NULL,cstrAV,"",MB_OK);<BR> <BR> //IPageLayout的IID=>{dd94d76a-836d-11d0-87ec-080009ec732a}<BR> StringFromIID(IID_IPageLayout,;lpolestrIID);<BR> LPCSTR cstrPLyt=OLE2CT(lpolestrIID);<BR> MessageBox (NULL,cstrPLyt,"",MB_OK);</P> <P> if (strcmp((LPSTR)cstrAV,(LPSTR)cstrPLyt)==0 )<BR> {<BR> MessageBox (NULL,"相同","",MB_OK);<BR> }<BR> else{<BR> MessageBox (NULL,"不相同!","",MB_OK);<BR> }</P> <P> //方案二:<BR> if(IsEqualIID(iid,IID_IActiveView)){<BR> MessageBox (NULL,"相同2","",MB_OK);<BR> }<BR> else{<BR> MessageBox (NULL,"不相同2!","",MB_OK);<BR> }<BR>上面是我今天做出来的判别IActiveViewPtr指针与IPageLayout接口的接口类型的二种方法。二种方案都可以识别二个接口,现在的问题是hr=ipMxDoc->get_ActiveView (;ipAV);(或者是ipAV=ipMxDoc;)有点问题,我测试了一下,无论是从ArcMap的数据视图还是从排版视图,得到的都是IActiveView。vb中好象不是这样的啊。看看VB中这二句多简单</P> <P>Set pAV = pMxDoc.ActiveView<BR>If TypeOf pAV Is IPageLayout Then Exit Sub</P> |
|
|
3楼#
发布于:2010-08-12 15:14
<P>自己找了一些贴上来,高手都是由于低手来的</P>
<P>C++ equivalent for VB TypeOf operator?</P> <P><a href="http://www.eggheadcafe.com/software/aspnet/33454433/c-equivalent-for-vb-typeof-operator.aspx" target="_blank" >http://www.eggheadcafe.com/software/aspnet/33454433/c-equivalent-for-vb-typeof-operator.aspx</A></P> |
|
|
4楼#
发布于:2010-08-12 15:17
<a href="http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.languages.vc/2004-03/0611.html" target="_blank" >http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.languages.vc/2004-03/0611.html</A>
|
|