Ejemplo n.º 1
0
        /// <summary>
        /// Подпрограмма инициализации драйвера платы PCI429
        /// </summary>
        /// <returns></returns>
        private void Open()
        {
            // Установка признака инициализации
            _init = true;

            var str_att = new[] { XmlSettings.Pci429Card1Element, XmlSettings.Pci429Card2Element };
            // Проверка наличия библиотеки
            var user_api = UnsafeNativeMethods.LoadLibrary();

            if (IntPtr.Zero == user_api)
            {
                // Сборка DLL не найдена
                _init = false;
                App.MyWork.LogFileData +=
                    "Библиотека DLL PCI429_4.dll не найдена" + Environment.NewLine;
                CommonClass.set_result_text("Инициализация плат PCI-429", 1, 45, false, visible: true);
            }
            else
            {
                // Инициализация плат
                for (var i = 0; i < MaxDevice; i++)
                {
                    var result         = false;
                    var address_device = 0U;
                    var description    = $"PCI-429,ADR#{address_device:D5}";
                    // Сдвиг шкалы ProgressBar
                    App.MyWindows.ValueProgress++;
                    // Считывание номера платы PCI429 из .xml файла
                    XmlSettings.Read(XmlSettings.XmlCfgKtaName, str_att[i], XmlSettings.Pci429AttSn,
                                     out address_device);
                    if (uint.MaxValue == address_device)
                    {
                        App.MyWork.LogFileData +=
                            "Ошибка чтения номера платы PCI429 из файла настроек" + Environment.NewLine;
                    }
                    else
                    {
                        try {
                            // Инициализация драйвера
                            // Создание объекта платы PCI429
                            address_device &= 0xFFFF;
                            _device[i]      = new GPCI429(( ushort )address_device);
                            if (pci429_4_errors.INVALID_HANDLE_VALUE != _device[i].handle)
                            {
                                result = true;
                            }
                            else
                            {
                                // Указатель на плату не получен
                                // Плата не инициализирована
                                App.MyWork.LogFileData +=
                                    $"Ошибка открытия 0х{_device[ i ].handle:X8}" + Environment.NewLine;
                            }
                        }
                        catch (DllNotFoundException exc) {
                            // The exception that is thrown when a DLL
                            // specified in a DLL import cannot be found.
                            // DllNotFoundException uses the HRESULT_COR_E_DLLNOTFOUND,
                            // which has the value 0x80131524.
                            App.MyWork.LogFileData += exc.Message + Environment.NewLine;
                        }
                        catch (EntryPointNotFoundException exc) {
                            // The exception that is thrown
                            // when an attempt to load a class fails
                            // due to the absence of an entry method.
                            // The EntryPointNotFoundException type
                            // exposes the following members.
                            App.MyWork.LogFileData += exc.Message + Environment.NewLine;
                        }
                    }
                    if (!result)
                    {
                        // Плата не инициализирована
                        // Сброс признака инициализации модуля
                        _init = false;
                    }
                    // Возврат результата
                    CommonClass.set_result_text($"Инициализация платы {description}", 1, 45, result, visible: true);
                }
            }
        }