<small id='X349w'></small><noframes id='X349w'>

    <i id='X349w'><tr id='X349w'><dt id='X349w'><q id='X349w'><span id='X349w'><b id='X349w'><form id='X349w'><ins id='X349w'></ins><ul id='X349w'></ul><sub id='X349w'></sub></form><legend id='X349w'></legend><bdo id='X349w'><pre id='X349w'><center id='X349w'></center></pre></bdo></b><th id='X349w'></th></span></q></dt></tr></i><div id='X349w'><tfoot id='X349w'></tfoot><dl id='X349w'><fieldset id='X349w'></fieldset></dl></div>
    <tfoot id='X349w'></tfoot>
      <bdo id='X349w'></bdo><ul id='X349w'></ul>
    <legend id='X349w'><style id='X349w'><dir id='X349w'><q id='X349w'></q></dir></style></legend>

      1. 从 C# 调用 IDispatch COM 接口的成员

        时间:2023-07-27
            <bdo id='siKot'></bdo><ul id='siKot'></ul>
            <i id='siKot'><tr id='siKot'><dt id='siKot'><q id='siKot'><span id='siKot'><b id='siKot'><form id='siKot'><ins id='siKot'></ins><ul id='siKot'></ul><sub id='siKot'></sub></form><legend id='siKot'></legend><bdo id='siKot'><pre id='siKot'><center id='siKot'></center></pre></bdo></b><th id='siKot'></th></span></q></dt></tr></i><div id='siKot'><tfoot id='siKot'></tfoot><dl id='siKot'><fieldset id='siKot'></fieldset></dl></div>
          • <legend id='siKot'><style id='siKot'><dir id='siKot'><q id='siKot'></q></dir></style></legend>

              <small id='siKot'></small><noframes id='siKot'>

                <tfoot id='siKot'></tfoot>

                    <tbody id='siKot'></tbody>
                • 本文介绍了从 C# 调用 IDispatch COM 接口的成员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我想从实现 C# 中的 IDispatch 接口的 COM 对象调用 GetIdsOfNames 函数.我编写了以下代码,但由于 DISP_E_UNKNOWNNAME 失败.这是正确的方法吗?

                  I wanted to call the GetIdsOfNames function from a COM object that implements the IDispatch interface in c#. I've written the following code but it fails with the DISP_E_UNKNOWNNAME. Is this the correct approach to do this?

                   Object so = Activator.CreateInstance(Type.GetTypeFromProgID("ProgID"));            
                   Object[] args = new Object[5];
                   string[] rgsNames = new string[1];
                   rgsNames[0] = "PrintNormal";
                   uint LOCALE_SYSTEM_DEFAULT = 0x0800;
                   uint lcid = LOCALE_SYSTEM_DEFAULT;
                   int cNames = 1;
                   int[] rgDispId = new int[1];
                   args[0] = IntPtr.Zero;
                   args[1] = rgsNames;
                   args[2] = cNames;
                   args[3] = lcid;
                   args[4] = rgDispId;             
                   Object result = so.GetType().InvokeMember("GetIDsOfNames", BindingFlags.InvokeMethod, null, so, args);
                  

                  谢谢,

                  理查德

                  推荐答案

                  不可以,因为 InvokeMember 内部使用 GetIDsOfNames,而这个只检查实际方法,而不是 IDispatch 中的前 6 个.或者换句话说,不能使用 IDispatch 的方法 Invoke 调用 GetIDsOfNames.这就是 COM 的工作原理.

                  No you cannot, because InvokeMember internally uses GetIDsOfNames, and this one only checks actual methods, not the first 6 in IDispatch. Or in other words, GetIDsOfNames cannot be invoked using IDispatch's method Invoke. That is how COM works.

                  这篇关于从 C# 调用 IDispatch COM 接口的成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:Shell32.Folder.GetDetailsOf(..,..) 有哪些可用选项? 下一篇:如何在 Visual Studio 2012 中创建 HelloWorld COM 互操作

                  相关文章

                    <legend id='tAe1Y'><style id='tAe1Y'><dir id='tAe1Y'><q id='tAe1Y'></q></dir></style></legend>

                    1. <small id='tAe1Y'></small><noframes id='tAe1Y'>

                      • <bdo id='tAe1Y'></bdo><ul id='tAe1Y'></ul>
                      <tfoot id='tAe1Y'></tfoot>

                    2. <i id='tAe1Y'><tr id='tAe1Y'><dt id='tAe1Y'><q id='tAe1Y'><span id='tAe1Y'><b id='tAe1Y'><form id='tAe1Y'><ins id='tAe1Y'></ins><ul id='tAe1Y'></ul><sub id='tAe1Y'></sub></form><legend id='tAe1Y'></legend><bdo id='tAe1Y'><pre id='tAe1Y'><center id='tAe1Y'></center></pre></bdo></b><th id='tAe1Y'></th></span></q></dt></tr></i><div id='tAe1Y'><tfoot id='tAe1Y'></tfoot><dl id='tAe1Y'><fieldset id='tAe1Y'></fieldset></dl></div>