【问题标题】:Using interface function defined in DLL使用 DLL 中定义的接口函数
【发布时间】:2019-02-23 00:53:02
【问题描述】:

我正在使用在 DLL 中定义的接口。

当我打电话时...

    m.GetMasterVolumeLevelScalar(btVol)

...我得到一个空引用异常,因为“m”什么都不是。

但是,我不能在这个界面上使用“new”。

如何正确使用这个界面?

我确实阅读了实现,但我没有找到类似于此接口的示例。

谢谢。

编辑:我现在知道我需要输入

 Implements Vannatech.CoreAudio.Interfaces.IAudioEndpointVolume

这些函数会自动添加到我的类中。

但是,我不确定如何处理 NonImplementedException,例如:

Public Function GetMasterVolumeLevelScalar(ByRef level As Single) As Integer Implements IAudioEndpointVolume.GetMasterVolumeLevelScalar
    Throw New NotImplementedException()
End Function

【问题讨论】:

  • 首先,不要发代码图片。代码是文本,错误消息也是。发布文本并解释错误发生的地点和情况。我们无法复制和粘贴图片以进行测试或搜索。不需要告诉拥有 1600 个代表点的人。屏幕截图可以作为发布代码的附件,但不能替代它。
  • EVERY 示例类似。接口只定义实现它的类型将具有什么功能。它不提供任何该功能。您必须定义一个实现该接口的类,然后为该接口包含的每个成员提供一个实现。 EVERY 示例将执行此操作,因此 EVERY 示例类似。
  • 如您所见,当您声明一个类,然后指定它实现一个接口时,IDE 会将该接口的所有成员添加到您的类中。这足以让您的类在需要该接口的实例的任何地方使用,但您的类仍然不会做任何事情。任何时候在您的类的实例上调用接口的成员时,都会抛出NotImplementedException,因为您已经声明了该成员,但您必须为其提供实现。您需要提供该实现,即编写执行您想做的代码。
  • “我只是需要返回 1 还是做其他事情?”。那会有什么用?你在这里缺少一些基本的东西。仅仅拥有一个名为SetMasterVolumeLevelScalar 的方法并不意味着任何事情都会发生。您必须在该方法中实际编写代码来设置主音量。界面确实说“这就是我所做的”。它说“这是你必须做的”。如果你期望某事发生,那么你必须让它发生。
  • 他在该代码中使用的MMDeviceEnumerator 类似乎来自here。然后你需要做他正在做的同样的事情。这个问题已经超出了你一开始问的范围。您问的问题好像是自己实现接口的简单案例,但事实并非如此。您需要花更多时间研究该代码,然后在需要时提出更具体的问题。您可以先按原样使用该链接代码。

标签: vb.net interface


【解决方案1】:

我明白了:

我只需要输入

Implements Vannatech.CoreAudio.Interfaces.IAudioEndpointVolume

通过这样做,所有函数都会自动添加到我输入这个的类中。

我只是没有向下滚动到足以看到。

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 2018-01-10
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2020-08-14
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多