首先,如果由于缺乏知识而不能正确解释我的问题,我先向您道歉。
我正在尝试使用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?