在與COM對象交互的時候有的時候我們得到一個對象,我們想知道它的類型,可以使用Object.GetType()方法得到的類型卻是System.__ComObject,因為System.__ComObject是代表所有COM對象的,但是它對我們來說是沒有任何意義的。如果想得到System.__ComObject的真正類型只要使用Microsoft.VisualBasic.Information.TypeName(objWindow.Object)就可以了,如果是非VB.net工程需要引用Microsoft.VisualBasic.dll 才能保證編譯通過。
12月6日添加說明:
經過反編譯TypeName方法,發現其核心實現為:
UnsafeNativeMethods.ITypeInfo pTypeInfo = null;
string pBstrName = null;
string pBstrDocString = null;
string pBstrHelpFile = null;
UnsafeNativeMethods.IDispatch dispatch = VarName as UnsafeNativeMethods.IDispatch;
if (((dispatch != null) && (dispatch.GetTypeInfo(0, 0x409, out pTypeInfo) >= 0)) && (pTypeInfo.GetDocumentation(-1, out pBstrName, out pBstrDocString, out num, out pBstrHelpFile) >= 0))
{
str5 = pBstrName;
}
和猜想的一致,它確實是通過IDispatch接口來完成的(呵呵,貌似也只有這一種方式)
12月6日添加說明:
經過反編譯TypeName方法,發現其核心實現為:
UnsafeNativeMethods.ITypeInfo pTypeInfo = null;
string pBstrName = null;
string pBstrDocString = null;
string pBstrHelpFile = null;
UnsafeNativeMethods.IDispatch dispatch = VarName as UnsafeNativeMethods.IDispatch;
if (((dispatch != null) && (dispatch.GetTypeInfo(0, 0x409, out pTypeInfo) >= 0)) && (pTypeInfo.GetDocumentation(-1, out pBstrName, out pBstrDocString, out num, out pBstrHelpFile) >= 0))
{
str5 = pBstrName;
}
和猜想的一致,它確實是通過IDispatch接口來完成的(呵呵,貌似也只有這一種方式)