Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676

Библиотека не работает должным образом

09.11.2022, 13:37. Показов 377. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня!

Пишу библиотеку расширение синтаксиса для 1С 7.7 (да да ей еще пользуются куча недорода)

дак вот решил писать более менее удобным (по крайней мере для себя способом)

но что то идет не так (

Вот код класса "AlexEngineU"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.Runtime.InteropServices;
 
namespace AlexEngineU
{
    [ComVisible(true), Guid("776264DE-FADE-4435-8E03-9387D43D8EF0"), ProgId("AddIn.V7AlexEngineU")]
 
    public class V7AlexEngineU : IInit, ILanguageExtender
    {
        
 
        private bool _isModified = false;
 
        public bool IsModified
        {
            get { return _isModified; }
            set
            {
                _isModified = value;
            }
        }
 
        const string c_AddinName = "V7AlexEngineU";
 
        public void Init([MarshalAs(UnmanagedType.IDispatch)] object pConnection)
        {
            V7Data.V7Object = pConnection;
        }
 
        public ФайловаяСистема РаботаСФайлами()
        {
            var ФС = new ФайловаяСистема();
            return ФС;
        }
 
  //      public ServerAnswer ИзменитьКодировкуФайла(string file)
        //{
 
        //  try
        //  {
  //              File.WriteAllText(file, File.ReadAllText(file, Encoding.GetEncoding(1251)), Encoding.UTF8);
 
  //              ServerAnswer serveranswer = new ServerAnswer();
  //              serveranswer.Результат = "Удачно";
  //              serveranswer.Описание = "Выполнено удачно";
  //              return serveranswer;
  //          }
 
        //  catch (Exception ex)
        //  {
        //      ServerAnswer serveranswer = new ServerAnswer();
        //      serveranswer.Результат = "Ошибка";
        //      serveranswer.Описание = ex.Message;
        //      return serveranswer;
        //  }
 
        //}
 
        public void RegisterExtensionAs(ref string bstrExtensionName)
        {
            bstrExtensionName = c_AddinName;
        }
 
    }
 
 
    [Guid("0dfd7314-6d80-473d-8595-7cb028b7e2da"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IInit
    {
 
        void Init([MarshalAs(UnmanagedType.IDispatch)] object pConnection);
 
        //ServerAnswer ИзменитьКодировкуФайла(string file);
 
        ФайловаяСистема РаботаСФайлами();
 
    }
 
    [Guid("823007ff-9808-427e-8ebc-e4cced58e9f5"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface ILanguageExtender
    {
        void RegisterExtensionAs(ref string bstrExtensionName);
 
    }
 
    internal class V7Data
    {
 
        public static object V7Object
        {
            get
            {
                return m_V7Object;
            }
            set
            {
                m_V7Object = value;
            }
        }
 
        private static object m_V7Object;
 
    }
}
далее код класса "ServerAnswer"

C#
1
2
3
4
5
6
7
8
9
10
namespace AlexEngineU
{
    public class ServerAnswer
    {
        public string Результат { get; set; }
 
        public string Описание { get; set; }
 
    }
}

и наконец код класса "ФайловаяСистема"

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.IO;
using System.Text;
 
namespace AlexEngineU
{
    public class ФайловаяСистема
    {
 
        public ServerAnswer ИзменитьКадировкуФайла(string file, string old_encoding, string new_encoding)
        {
            return ChangeFileEncoding(file, old_encoding, new_encoding);
        }
 
        public ServerAnswer ChangeFileEncoding(string file, string old_encoding,string new_encoding)
        {
 
            try
            {
                File.WriteAllText(file, File.ReadAllText(file, Encoding.GetEncoding(old_encoding)), Encoding.GetEncoding(new_encoding));
 
                ServerAnswer serveranswer = new ServerAnswer();
                serveranswer.Результат = "Успех";
                serveranswer.Описание = "Успешно выполнено";
                return serveranswer;
            }
 
            catch (Exception ex)
            {
                ServerAnswer serveranswer = new ServerAnswer();
                serveranswer.Результат = "Исключение";
                serveranswer.Описание = ex.Message;
                return serveranswer;
            }
 
        }
    }
}

Библиотека решится класс вызывается но сторонняя программа (в моем случае 1С 7,7) ругается что нету метода ИзменитьКадировкуФайла, так же пытался вызвать на англоязычном ChangeFileEncoding ничего не работает


отчего? что я не так сделал?

вот код как юзать библиотеку

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//*******************************************
Процедура Выполнить()
    //Будет наделем субклассами 
    //типа ФайловаяСистема - Класс будет включать в себя методы и перечисления для работы с файлами 
    //(Чтение / запись / упаковка) и т д 
    //каждый метод будет иметь свой возвращаемый тип данных
    //к примеру метод ИзменитьКадировкуФайла возращает структуру и два значения  "Результат = тип строка "Успех-(если выполнено успешно) / Исключение-(если выплнено не удачно)"
    //метод ИзменитьКадировкуФайла(ПолныйПутьКФайлу,ТекущаяКадировкаФайлы,НоваяКадировкаФайла) принимает три обязательных парамтера
    //ПолныйПутьКФайлу Полный путь к файлу 
    //ТекущаяКадировкаФайлы Текущая кадировка файла в виде строки ("1251" или "utf-8'либо "utf/32") 
    //НоваяКадировкаФайла Новая кадировка файла в виде строки ("1251" или "utf-8'либо "utf/32") 
    
    //Подключаем компаненту    
    Расширение = СоздатьОбъект("AddIn.V7AlexEngineU"); 
    //Создаем новый экземпляр класса в нашем счлучае "ФайловаяСистема"
    ФайловС = Расширение.ФайловаяСистема(); 
    //Выполняем метод и ожидаем результата 
    Ответ =    ФайловС.ИзменитьКадировкуФайла("D:\1С\081122.xml","1251","utf-8");
    //Сообщаем результат
    Сообщить("Результат: "+Ответ.Результат+" Описание: "+Ответ.Описание);
    
    //В будущем некоторые методы которые подразумевают долгосрочную работу можно будет вызывать ассинхронно
    // Например Вам необходимо начать обмен с сайтом но при всем при этом необходимо продолжать работу в 1С
    //Можно будет сделат ьчтото подобно следующего
    //Передать Путь до базы данных 1С, либо Путь до журнала логирования для логов хода работы программы
    //Заполнять таблицу значений полными данными
    //И создать новый экземлряр ассинхронного класса типа ВебЗапрос = Расширение.ВебЗапрос("АС"); 
    //Парамтер АС подразумевает инструкцию что далее мы будем выполнять методы данного класса ассинхронно
КонецПроцедуры
Добавлено через 9 минут
не дописал

если раскосматить методы в первом классе и обращаться к ним то все отлично выполняется

я так понимаю мне необходимо из первого класса описать методы класса которые я буду вызывать? но не понимаю ка кэто сделать помогите кто может пожалуйста

Добавлено через 13 минут
извиняюсь не поправил код в 1С но это не влияет на мою пролему

C#
1
2
3
4
5
6
7
Было
 
ФайловС = Расширение.ФайловаяСистема(); 
 
Стало
 
ФайловС = Расширение.РаботаСФайлами();
Добавлено через 54 минуты
Как оказалось все работает! просто почему то исключение мне не вернулось

в общем проблема была в том что я передавал
Encoding.GetEncoding("1251") а необходимо было передавать число (

в общем я переписал немного код и все заработало спасибо всем!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2022, 13:37
Ответы с готовыми решениями:

Не работает должным образом StreamWriter
Доброго времени суток! После написания кода , который содержит StreamWriter программа ошибок не выдает, однако, в указанный файл ничего не...

Не работает должным образом программа - работа со строками.
нужно реализовать вывод на экран всех строк содержащих двузначные числа . дан исходный текстовый документ. прогу сделал, но чего-то не до...

Не получается должным образом получить HTML код сайта программным способом
Здравствуйте! Недавно решил сделать прогу на C#, а чтобы она нормально работала нужно считывать инф-цию с сайта. Информация считывается, но...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2022, 13:37
Помогаю со студенческими работами здесь

Программа не работает должным образом! C#
Была задача: Вводится текст. Отредактировать текст, удаляя те слова которые уже встречались ранее. Конец ввода F1. Задачу сделал, но...

Асинхронный вызов веб сервиса не работает должным образом
Есть веб сервис Service.cs. Нужно реализовать синхронный и асинхронный вызов. Синхронный нормально работает и все считает, а вот с...

WPF / Save The Humans / не работает должным образом кнопка startButton / VS CM2017
Добрый вечер! Сейчас прохожу пример из книжки Эндрю Стиллмена "Head First. C#" издательства O'Reilly. Застрял на первом примере Save The...

WPF / Save The Humans / не работает должным образом кнопка startButton / VS 2019
Добрый вечер! Сейчас читаю книгу Эндрю Стиллмена "Head First. C#". Сделал первый пример, сборка прошла без ошибок, но кнопка старт не...

Не обрабатывается должным образом нажатие клавиш
на форме есть кнопка Button которая должна двигатся при нажатии на стрелки на клавиатуре. при нажатии на клавишу(одну или несколько...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru