Обновить
17
0
Смирнов Сергей @Serginio1

Программист

Отправить сообщение
Для WinFone и прочего есть xamarin. А вот для Linux ничего нет.
Сайт это TypeScript? то там нужно npm install сделать, что бы установить создать папку node_modules

Огромное спасибо за поддержку. Проблема в том, что я один. У меня огромное время уходит на изучение C++, TypeScrpt и еще кучи вещей что бы связать JS-native-Net.При этом я работаю программистом 1С. Все это в свободное от работы время. Плюс я плохой художник. Выложил программы, но на данный момент их скачали всего 4 человека.
Еще раз
Скорость вызова без Proxy 60к вызовов в секунду
Скорость вызова с прокси Proxy 45k вызовов в секунду
Скорость вызова итератора 160k вызовов в секунду

Вызываем функцию

 public int ПолучитьЧисло(int число)
        {

            return число;
        }

Код такой
// Протестируем скорость вызовов без Proxy
            var start = new Date();
            let count = 100000;
            let result = 0;
            for (let i = 0; i < count; i++)
                result += window.CallNetMethod(Id, "ПолучитьЧисло", [1]);

            this.speed = Math.round(count / (new Date().getTime() - start.getTime()) * 1000);
      

        // Протестирум это же но через Proxy

            start = new Date();
            result = 0;
            for (let i = 0; i < count; i++)
                result +=TO.ПолучитьЧисло(1);

            this.speedWithProxy = Math.round(count / (new Date().getTime() - start.getTime()) * 1000);

           // Протестируем скорость вызова итератора
            let iter = TO.GetNumbers(count);
            start = new Date();
            result = 0;
            for (let i of iter)
                result += i;

            this.spedCallIterator = Math.round(count / (new Date().getTime() - start.getTime()) * 1000);

            NetObject.DeleteNetObjets(TO, Тестовый, iter);
    }
Они минимальны по сравнению с http\ws.
При этом часто нужно работать с торговым оборудованием или дисками и прочим оборудованием. Сейчас кстати пишу оберки для использования событий .Net классов
Ну в статье же написано про CEF

Внизу статьи показаны ссылки на программы которые можно запустить. В начале статьи
Можно сделать определенную конфигурацию CEF для всех платформ и можно делать кросспалатформенные декстопные приложения.


Ребята читайте пожалуйста внимательнее, или подскажите как лучше написать.
В статье есть тесты на вызовы
Скорость вызова без Proxy 60к вызовов в секунду
Скорость вызова с прокси Proxy 45k вызовов в секунду
Скорость вызова итератора 160k вызовов в секунду

Можно же скачать исходники и все пощупать.
Еще раз прошу прощения у всех читателей за русльшь. Но я попытаюсь оправдаться.
На самом деле этому проекту уже несколько лет. Ноги растут отсюда Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент

Но сама разработка велась еще раньше. При этом от этого я никаких дивидентов не получаю. В основном тычки «зачем это нужно», но есть конечно и благодарности, но их немного. При этом реально легко можно расширить возможности для 1С. Но и 1С это не нужно. Мои разработки Но я не опускаю руки. Днем программирую на 1С, а вечером еще на C#,C++ и TypeScript.
При этом катастрофически не высыпаюсь. Но в разработке много интересного и я хочу поделиться этим с коллегами, надеясь, что коллеги простят мне мой руслиш и войдут в моё нелегкое положение. При этом я прекрасно понимаю, что получу кучу минусов. Но надеюсь, что за мои труды мне полагается небольшое снисхождение.
На самом деле я не видел где есть полный доступ к классам .Net из браузера. Если подскажешь то буду благодарен. Сейчас например для Linux нет аналога WPF, а моя разработка помогает использовать кроссплатформенный .Net Core в браузере, или просто расширить возможности браузера за счет классов .Net
Проблема в том, что я завожусь, не сплю итд пока не сделаю, то что наметил. Поэтому для меня очень важен сон и душевное спокойствие, иначе я вообще не напишу статью. Еще раз прошу прощения. Но кроме руслиша, там много всего интересного. Что кроме руслиша тебе не понравилось?
Ну у меня и не было цели учить новичков. Главная моя цель показать как можно легко использовать классы .Net в TypeScript и каким образом это достигается. Для меня такие статьи очень познавательны. Здесь собрано много вещей, аналогов которых нет, или их просто сложно найти. На многие вопросы ни на одном форуме не было ни одного ответа. Ну и опять же чем сложен этот пример?
Сразу прошу прощения за руслиш.

// Получим Тип из сборки лежащей в каталоге приложения
let Тестовый = Net.GetType("TestDllForCoreClr.Тестовый", "TestDllForCoreClr");
// Создадим объект используя new
let TO = new Тестовый("Свойство из Конструктора");
// Получим ExpandoObject
var EO = TO.ПолучитьExpandoObject();
let Имя=EO._Имя;// Свойства через _
let Число=EO._Число;
let делегат = EO._ВСтроку;
let res= делегат());// Вызовем как делегат
 // Для ExpandoObject можно вызвать как метод
 res= EO.ВСтроку());// Для ExpandoObject



Показано как просто можно использовать классы .Net Core
На самом деле здесь много интересного. Это и Proxy и Promise для TypeScript.
Работа с CEF, а так же и Net Core. Кроме того здесь показано как просто можно использовать классы .Net очень близко к кодированию на C#. Здесь очень много информации на любой вкус.
Кстати мне посоветовали cef / JavaScriptIntegration

Его наверное и возьму за основу
Понятно, но это уже дикое смешение. На самом деле хоть какой то вариант заработал. Но проблема в том, что я 1С ник и занимаюсь в всободное время. .Net знаю неплохо, но вот с С++ и С очень мало практики. Кроме того привык к VS а например Debugging with Visual Studio только для VS 2010 и 2012. Под 2012 у меня не получилось скомпилировать даже пример. Но по обсуждению я так понимаю, что мало кому это нужно. А время на это тратить нужно и не мало. И больше не на реализацию, а на обучение плагинописанию.
Смысл есть. Опять же мне нужен массив для Task.WhenAll. Кроме того это лишнее взаимодействие между нативом и Net. Не все так просто. То есть нужно в натив возвращать флаг, что это Task для того, что бы натив не вызывал событие, передавал ключ в Net а дальше для задачи вызывался await или ContinueWhith с событием которое вызывает метод натива с передачей ключа и результата.

Мне лично await client.async.GetStringAsync нравится.
Кроме того для дженерик методов где нельзя вывести тип у меня применяется in
например
C# вариант
var HtmlAnchorElement = document.QuerySelector<IHtmlAnchorElement>(rowSelector);


может выглядеть так

let HtmlAnchorElement = avait doc.in(IHtmlAnchorElement).QuerySelector(rowSelector));


Кроме того иногда нужно получить интерфейс (у него свои методы)

let obj= await obj.as("IEnumerable");
или
let obj= await obj.as(IEnumerable);

Но можно ввести служебное слово например async

 let response= await client.async.GetStringAsync("https://msdn.microsoft.com/ru-ru/library/hh551745(v=vs.118).aspx")
Если это к моей библиотеке то она посзволяет все и события и обратные вызовы через динаимескую компиляцию, которая автоматически создает обертки.

 public static object СоздатьОберткуДляСобытий(Object ОбъектССобытиями)
        {

            Type тип = ОбъектССобытиями.GetType();
            Type genType = typeof(КомВраперДляСобытий<>);
            Type constructed = genType.MakeGenericType(new Type[] { тип });
            var ИмяСвойства = "СоздательОбертки";

              var fi = constructed.GetField(ИмяСвойства);
              Delegate функция = (Delegate)fi.GetValue(null);
             // Получили делегат
             // И из него получим объект обертку для событий который передадим в 1С для хранения ссылки на него
            object обертка = функция.DynamicInvoke(new Action<string,string,object>(ВызватьВнешнееСобытиеСОбъектом), ОбъектССобытиями);
            return обертка;

        }


Правда пока обертка делается ко всем событиям. Но можно ограничить.
Кроме того можно динамически скомпилировать нужный класс подписаться на событие из него получить ссылку на делегат и передать эту ссылку.
 static Delegate ПолучитьДелегатПоТипу(IPropertyOrFieldInfo Свойcтво)
        {
            var ReturnType = Свойcтво.GetPropertyType();

            if (ReturnType == typeof(Action<string, string, object>)) return new Action<string, string, object>(ВызватьВнешнееСобытиеСОбъектом);

            if (ReturnType == typeof(Action<string, string, string>)) return new Action<string, string, string>(AutoWrap.ВызватьВнешнееСобытие1С);

            throw new Exception("Не не нужного типа  " + ReturnType.ToString());
        }
        public static void УстановитьДелегатДляВызоваВнешнегоСобытия(object объект, string ИмяДелегата)
        {

            var Свойcтво = НайтиСвойство(объект, ИмяДелегата);
            var value = ПолучитьДелегатПоТипу(Свойcтво);

            Свойcтво.SetValue(объект, value);
        }


У меня есть только взаимодействие 1С с .Net Core. Но пока все это в стол. Хотя есть на стороне .Net поддержка и параметы массивы, ref параметры, автовывод дженерик типов, поиск методов расширений и опять же с дженериками.
Подержка событий через динамическую компиляцию оберток для событий. Просто так или иначе я один не то что не потяну, а нет смысла писать в стол.
А реализовать можно взаимодействие и с JS объектами через DynamicObject по аналогии с COM объектами http://infostart.ru/public/466196/
Просто нет подсчета ссылок, но можно только на время вызова держать ссылку

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность