当前位置:  开发笔记 > 编程语言 > 正文

如何找到未记录的.NET/COM库函数?

如何解决《如何找到未记录的.NET/COM库函数?》经验,为你挑选了1个好方法。

如何找出从某些.NET函数返回的COM对象的属性和方法,这些函数似乎没有记录?

在我正在看的特定示例中,我使用以下函数将图片插入Excel:

Set NewPic = ActiveSheet.Pictures.Insert(FileName)

(请参阅此处的SO帖子.)

但是,此函数的MSDN文档仅表示Worksheet.Pictures返回一个Object,当我在调试期间对变量进行监视时,其类型为System .__ ComObject.我可以找出该类可用的其他属性和功能(例如,我想修改图片的替代文本)吗?发现这个Insert功能的人怎么会知道呢?

MSDN文档也倾向于说这些函数"它们不打算直接从你的代码中使用",但是现在让我们忽略它...

谢谢!


编辑:嗯,我设法至少回答了我的具体问题.Worksheet.Pictures.Insert您可以使用Worksheet.Shapes.AddPicture返回正确(记录)的Excel.Shape类而不是使用它:

pic = range.Worksheet.Shapes.AddPicture(tmpFile, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, range.Left, range.Top, image.Width, image.Height)
pic.AlternativeText = "Help!"

尽管如此,仍然会对任何未记录的函数资源感兴趣.



1> Mike Spross..:

找到这些东西的一种方法是使用该OleView工具(您可以在此处从Microsoft下载).此工具允许您查看COM类型库.类型库(假设COM组件的供应商提供了类型库信息)包含有关接口以及应用程序或库公开的COM类的方法和属性的信息.

例如,在我的机器上,我可以查看类型库C:\Program Files\Microsoft Office\Office12\EXCEL.EXE,查看Excel公开的COM对象及其属性和方法.OleView以IDL(接口描述语言)显示信息,这或多或少是一个带有额外属性的C函数原型.

这是我OleView用于该__Worksheet.Pictures属性的IDL声明:

    [id(0x00000303), hidden, helpcontext(0x00010303)]
    HRESULT Pictures(
                    [in, optional] VARIANT Index, 
                    [in, lcid] long lcid, 
                    [out, retval] IDispatch** RHS);

请注意hidden声明中的属性.这意味着它不会被大多数IDE显示(并且是一个很好的提示,不依赖于此方法始终存在 - Microsoft可以在更高版本的Excel中删除它).

Pictures课怎么样?这是完整的IDL:

[
  uuid(000208A7-0000-0000-C000-000000000046),
  helpcontext(0x00020067),
  hidden
]
dispinterface Pictures {
    properties:
    methods:
        [id(0x60000000), restricted]
        void QueryInterface(
                        [in] GUID* riid, 
                        [out] void** ppvObj);
        [id(0x60000001), restricted]
        unsigned long AddRef();
        [id(0x60000002), restricted]
        unsigned long Release();
        [id(0x60010000), restricted]
        void GetTypeInfoCount([out] unsigned int* pctinfo);
        [id(0x60010001), restricted]
        void GetTypeInfo(
                        [in] unsigned int itinfo, 
                        [in] unsigned long lcid, 
                        [out] void** pptinfo);
        [id(0x60010002), restricted]
        void GetIDsOfNames(
                        [in] GUID* riid, 
                        [in] char** rgszNames, 
                        [in] unsigned int cNames, 
                        [in] unsigned long lcid, 
                        [out] long* rgdispid);
        [id(0x60010003), restricted]
        void Invoke(
                        [in] long dispidMember, 
                        [in] GUID* riid, 
                        [in] unsigned long lcid, 
                        [in] unsigned short wFlags, 
                        [in] DISPPARAMS* pdispparams, 
                        [out] VARIANT* pvarResult, 
                        [out] EXCEPINFO* pexcepinfo, 
                        [out] unsigned int* puArgErr);
        [id(0x00000094), propget, helpcontext(0x00010094)]
        Application* Application();
        [id(0x00000095), propget, helpcontext(0x00010095)]
        XlCreator Creator();
        [id(0x00000096), propget, helpcontext(0x00010096)]
        IDispatch* Parent();
        [id(0x00010003), restricted, hidden]
        void _Dummy3();
        [id(0x0000025a), helpcontext(0x0001025a)]
        VARIANT BringToFront();
        [id(0x00000227), helpcontext(0x00010227)]
        VARIANT Copy();
        [id(0x000000d5), helpcontext(0x000100d5)]
        VARIANT CopyPicture(
                        [in, optional, defaultvalue(2)] XlPictureAppearance Appearance, 
                        [in, optional, defaultvalue(-4147)] XlCopyPictureFormat Format);
        [id(0x00000235), helpcontext(0x00010235)]
        VARIANT Cut();
        [id(0x00000075), helpcontext(0x00010075)]
        VARIANT Delete();
        [id(0x0000040f), helpcontext(0x0001040f)]
        IDispatch* Duplicate();
        [id(0x00000258), propget, helpcontext(0x00010258)]
        VARIANT_BOOL Enabled();
        [id(0x00000258), propput, helpcontext(0x00010258)]
        void Enabled([in] VARIANT_BOOL rhs);
        [id(0x0000007b), propget, helpcontext(0x0001007b)]
        double Height();
        [id(0x0000007b), propput, helpcontext(0x0001007b)]
        void Height([in] double rhs);
        [id(0x0001000c), restricted, hidden]
        void _Dummy12();
        [id(0x0000007f), propget, helpcontext(0x0001007f)]
        double Left();
        [id(0x0000007f), propput, helpcontext(0x0001007f)]
        void Left([in] double rhs);
        [id(0x0000010d), propget, helpcontext(0x0001010d)]
        VARIANT_BOOL Locked();
        [id(0x0000010d), propput, helpcontext(0x0001010d)]
        void Locked([in] VARIANT_BOOL rhs);
        [id(0x0001000f), restricted, hidden]
        void _Dummy15();
        [id(0x00000254), propget, hidden, helpcontext(0x00010254)]
        BSTR OnAction();
        [id(0x00000254), propput, hidden, helpcontext(0x00010254)]
        void OnAction([in] BSTR rhs);
        [id(0x00000269), propget, helpcontext(0x00010269)]
        VARIANT Placement();
        [id(0x00000269), propput, helpcontext(0x00010269)]
        void Placement([in] VARIANT rhs);
        [id(0x0000026a), propget, helpcontext(0x0001026a)]
        VARIANT_BOOL PrintObject();
        [id(0x0000026a), propput, helpcontext(0x0001026a)]
        void PrintObject([in] VARIANT_BOOL rhs);
        [id(0x000000eb), helpcontext(0x000100eb)]
        VARIANT Select([in, optional] VARIANT Replace);
        [id(0x0000025d), helpcontext(0x0001025d)]
        VARIANT SendToBack();
        [id(0x0000007e), propget, helpcontext(0x0001007e)]
        double Top();
        [id(0x0000007e), propput, helpcontext(0x0001007e)]
        void Top([in] double rhs);
        [id(0x00010016), restricted, hidden]
        void _Dummy22();
        [id(0x0000022e), propget, helpcontext(0x0001022e)]
        VARIANT_BOOL Visible();
        [id(0x0000022e), propput, helpcontext(0x0001022e)]
        void Visible([in] VARIANT_BOOL rhs);
        [id(0x0000007a), propget, helpcontext(0x0001007a)]
        double Width();
        [id(0x0000007a), propput, helpcontext(0x0001007a)]
        void Width([in] double rhs);
        [id(0x0000026e), propget, helpcontext(0x0001026e)]
        long ZOrder();
        [id(0x000005f8), propget, helpcontext(0x000105f8)]
        ShapeRange* ShapeRange();
        [id(0x00000080), propget, helpcontext(0x00010080)]
        Border* Border();
        [id(0x00000081), propget, helpcontext(0x00010081)]
        Interior* Interior();
        [id(0x00000067), propget, helpcontext(0x00010067)]
        VARIANT_BOOL Shadow();
        [id(0x00000067), propput, helpcontext(0x00010067)]
        void Shadow([in] VARIANT_BOOL rhs);
        [id(0x00000105), propget, helpcontext(0x00010105)]
        BSTR Formula();
        [id(0x00000105), propput, helpcontext(0x00010105)]
        void Formula([in] BSTR rhs);
        [id(0x000000b5), helpcontext(0x000100b5)]
        Picture* Add(
                        [in] double Left, 
                        [in] double Top, 
                        [in] double Width, 
                        [in] double Height);
        [id(0x00000076), propget, helpcontext(0x00010076)]
        long Count();
        [id(0x0000002e), helpcontext(0x0001002e)]
        GroupObject* Group();
        [id(0x000000fc), helpcontext(0x000100fc)]
        Picture* Insert(
                        [in] BSTR Filename, 
                        [in, optional] VARIANT Converter);
        [id(0x000000aa), helpcontext(0x000100aa)]
        IDispatch* Item([in] VARIANT Index);
        [id(0xfffffffc), helpcontext(0x0000fffc)]
        IUnknown* _NewEnum();
        [id(0x000000d3), helpcontext(0x000100d3)]
        Picture* Paste([in, optional] VARIANT Link);

由此可以推测,Pictures界面具有a CutDelete方法,以及Item属性等.但请注意,这个界面也是标记的hidden,这也是一个很好的迹象,表明你不应该真正使用它(是的,我知道你忽略了这个警告,但我是第二次Mitch Wheat的评论,这通常是一个坏主意使用隐藏类,因为它们通常用于应用程序自己的内部使用,如有更改,恕不另行通知.)


很棒的回答,谢谢!几乎肯定会接受这一点,只会看看是否还有其他人想先进行筹码.同意你和Mitch没有过多地使用未记录的功能.虽然好奇心确实让我变得更好!
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有