Ошибка: не удалось получить фабрику класса COM для компонента с CLSID из-за следующей ошибки: 80040154 - PullRequest
0 голосов
/ 03 января 2019

У меня есть приложение c # winforms, которое я использую для отправки аудиовыхода с камеры, который использует сторонние dll для подключения к устройству и отправки аудио на устройство. когда я запускаю свое приложение на моей локальной машине, то все работает без проблем. Проблема: Но когда я копирую свое приложение на другую машину и запускаю его, я получаю эту ошибку Невозможно отправить аудио на это устройство. Ошибка: получение фабрики классов COM для компонента с CLSID не выполнено из-за следующей ошибки: 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, а приложение предназначено для x86, а также dll-версия версии 4.6 и сборка x86.

Я установил тип взаимодействия Embed на false.

Я пробовал различные решения для решения этой проблемы, такие как очистка compomentmodelcache перед сборкой приложения, но проблема существует. Я проверяю, что они могут быть проблемы, связанные с атрибутом dll DeviceConnectorClass GUID с реестром Windows.

Thankyou!

...