我有一个c#winforms应用程序,用于从摄像机发送音频,该摄像机使用第三方dll连接到设备并将音频发送到设备。当我在本地计算机上运行应用程序时,一切运行正常,没有任何问题。 问题:但是当我将应用程序复制到另一台计算机上并运行它时,出现此错误无法将音频发送到此设备。错误:由于以下错误,无法为具有CLSID的组件检索COM类工厂:80040154(异常HResult):0x80040154(REGDB_E_CLASSNOTREG)。
请任何知道的人都能告诉我此错误的含义,当我运行该错误时,在另一台计算机上发生此错误的可能性是什么。
我用于连接设备并将音频发送到设备的代码是-
[NonSerialized]
public Bosch.VideoSDK.Live.AudioOutput audioOutput = null;
[NonSerialized]
private Bosch.VideoSDK.AudioLib.AudioSourceClass audioSource = null;
[NonSerialized]
private Bosch.VideoSDK.Device.DeviceProxy deviceProxy = null;
[NonSerialized]
private Bosch.VideoSDK.AudioLib.AudioSourceClass audioSource = null;
private bool ConnectDeviceAndStartSendingAudioOut(ref string error)
{
bool connectResult = true;
try // Connect to the device using a URL that we build.
{
error = string.Empty;
if (Camera.Camera_UserName != "" && Camera.Camera_Password != "")
{
deviceUrl = string.Format("{0}:{1}@{2}", Camera.Camera_UserName, Camera.Camera_Password, this.Camera.Get_Default_IP());
}
deviceConnector = new Bosch.VideoSDK.Device.DeviceConnector();
deviceConnector.DefaultTimeout = 2000;
audioSource = new Bosch.VideoSDK.AudioLib.AudioSourceClass();
audioSource.SelectDevice(0);
audioSource.EnableInput(0, true);
// Establish the connection synchronously.
deviceProxy = deviceConnector.Connect(deviceUrl, "");
if(deviceProxy == null)
{
return false;
}
switch (deviceProxy.ConnectionState)
{
case Bosch.VideoSDK.Device.ConnectResultEnum.creInitialized:
case Bosch.VideoSDK.Device.ConnectResultEnum.creConnected:
//StartAudioInput();
StartAudioOutput();
connectResult = true;
break;
default:
DisconnectDevice();
connectResult = false;
break;
}
}
catch (Exception ex)
{
ExceptionHandler.handleException(ex);
error = ex.Message;
connectResult = false;
}
return connectResult;
}
private void StartAudioOutput()
{
Bosch.VideoSDK.Live.AudioOutputs aoAudioOutCol = deviceProxy.AudioOutputs;
if (aoAudioOutCol != null)
{
foreach (Bosch.VideoSDK.Live.AudioOutput ao in aoAudioOutCol)
{
audioOutput = ao;
SetAudioOutputToSource();
}
}
}
private void SetAudioOutputToSource()
{
audioOutput.SetStream(audioSource.Stream);
}
我的项目是用于.net Framework 4.6版本的buit,应用程序是用于x86的buit,而dlls版本也是4.6版本并已构建x86。
我已将Embed互操作类型设置为false。
我尝试了各种解决方案来解决此问题,例如在构建应用程序之前清除了compomentmodelcache,但是存在问题。 我检查了它们是否可能与Windows注册表中的dll DeviceConnectorClass GUID 属性有关。
谢谢!