错误:由于以下错误,无法为具有CLSID的组件检索COM类工厂:80040154

时间:2019-01-03 07:22:52

标签: c# .net visual-studio-2013 com interop

我有一个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); 
    }

连接到设备的第三方dll是- enter image description here

我的项目是用于.net Framework 4.6版本的buit,应用程序是用于x86的buit,而dlls版本也是4.6版本并已构建x86。

我已将Embed互操作类型设置为false。

我尝试了各种解决方案来解决此问题,例如在构建应用程序之前清除了compomentmodelcache,但是存在问题。 我检查了它们是否可能与Windows注册表中的dll DeviceConnectorClass GUID 属性有关。

谢谢!

0 个答案:

没有答案