【发布时间】: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。然后你需要做他正在做的同样的事情。这个问题已经超出了你一开始问的范围。您问的问题好像是自己实现接口的简单案例,但事实并非如此。您需要花更多时间研究该代码,然后在需要时提出更具体的问题。您可以先按原样使用该链接代码。