将动态函数调用为对象错误

时间:2010-09-17 21:29:29

标签: c# interop activex intel

我知道标题听起来有点奇怪,但这让我的想法有点让人难以置信。所以英特尔为这个TurboBoost侧边栏小工具提供了使用JavaScript的调用,我想在C#中从头开始编写一个程序来做同样的事情。这些调用源于我认为是我轻松导入的ActiveX DLL。问题是,每当我尝试调用一个函数时,它都会给出错误“非静态字段需要一个对象引用...”我找到了所有的函数,例如我使用的那个返回动态数据结构。我试过拆分功能并使它们都是静态但仍然没有运气。这是代码(ITurboBoostClient是接口部分):

namespace TurboBoostMon_CLI
{
    class Program
    {
        public static object GetCPUFreq()
        {
            object n = ITurboBoostClient.GetCurBaseFrequency(); //<---- error
            //return Convert.ToDouble(n);
            return n;
        }

        public static void Main(string[] args)
        {
            object cpubasefreq = GetCPUFreq();
            Console.WriteLine(cpubasefreq); // neglect the output for now
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果使用典型的命名约定,ITurboBoostClient是interface,并且您没有实现该接口的对象实例。因此,错误。

如果不了解有关ActiveX DLL的更多信息,很难确切地说要做什么,但这将是:

{
    ITurboBoostClient myClient = TurboBoostFactory.GetInstance();
    object n = myClient.GetCurBaseFrequencey();
    return n;
}

请注意,在第一行中,您调用一个静态方法,该方法可以生成所需的类(带有接口)。然后你可以实际使用该界面。

再次查看导入的ActiveX库,看看是否可以找到工厂方法,CreateInstance方法或其他将创建初始对象的实例化器。

答案 1 :(得分:0)

如果您收到该错误,则需要将某些内容声明为新对象。假设您的错误标记是正确的,您需要更改它以创建一个继承ITurboBoostClient的对象的新实例,然后使用它来调用GetCurBaseFrequenct()方法。

类似的东西:

ITurboBoostClient myTurboBoost = new TurboBoostClientObject(); // Making names up here, not familiar with the framework you're working with.
object n = myTurboBoost.GetCurBaseFrequency();

抱歉,我不知道你需要在那里实例化什么课程,但谷歌上的一个简短的挖掘肯定会有所启示。