我知道标题听起来有点奇怪,但这让我的想法有点让人难以置信。所以英特尔为这个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
}
}
}
答案 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();
抱歉,我不知道你需要在那里实例化什么课程,但谷歌上的一个简短的挖掘肯定会有所启示。