使用C#,如何在exe中访问COM Dispinterface? (MissingMethodException)

时间:2019-07-17 10:55:10

标签: c# c++ com

首先,如果由于缺乏知识而不能正确解释我的问题,我先向您道歉。

我正在尝试使用C#编写的具有COM接口的可执行文件,从C#程序中调用方法。

不幸的是,我无法对C ++进行更改,但是我确实可以访问源代码作为参考

界面如下:

    [ uuid(369AF225-D0F4-11D8-9DF3-00A0C91D6277), version(1.0) ]
    library Spares
    {
        importlib("stdole32.tlb");
        importlib("stdole2.tlb");

        [ uuid(369AF226-D0F4-11D8-9DF3-00A0C91D6277) ]
        dispinterface ISpares
        {   
            methods:
                [id(1)] void SetTaskId(BSTR TaskId);
                [id(2)] boolean ReplaceLRU(long HotspotVal);
                [id(3)] void SetUsingToolkit(boolean UsingToolkit);
        };

        [ uuid(369AF224-D0F4-11D8-9DF3-00A0C91D6277) ]
        coclass Spares
        {
            [default] dispinterface ISpares;
        };
    };

我的代码如下:

    using System;
    using System.Diagnostics;
    using System.Reflection;

    namespace COMTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Process[] sparesProcess = Process.GetProcessesByName("Spares");

                if (0 == sparesProcess.Length)
                {
                    Console.WriteLine("Spares.exe not found");
                    return;
                }

                Type replaceLRUType = sparesProcess[0].GetType();
                object replaceLRUResult = replaceLRUType.InvokeMember("ReplaceLRU", BindingFlags.InvokeMethod, null, sparesProcess[0], new object[]{(long)373145380});
                Console.WriteLine(replaceLRUResult.ToString());
            }
        }
    }

我的代码给了我MissingMethodException,但是我对COM的了解还不足以谷歌搜索答案。我怎么称呼ReplaceLRU?

0 个答案:

没有答案