Re[4]: Использование в TypeScript классов .Net
От: fddima  
Дата: 25.01.17 23:46
Оценка:
Здравствуйте, _Raz_, Вы писали:

Обертка не может слить в этом вопросе. Извини ты тут мимо. И вообще дотнет скраю. Я спросил — скайтер вообще это поддерживает или нет?
Re: Использование в TypeScript классов .Net
От: fddima  
Дата: 26.01.17 00:04
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

@Serginio1 — я не очень думаю что тут это вообще кому-то реально интересно. Т.е. я на самом деле предлагаю перенести обсуждения или вопросы на http://magpcss.org/ceforum. Более того — если форум поддерживает русский язык — просто пиши по русски в CefGlue разделе. Я там отвечу. Вообще должен. Возможно тебе прийдется пройти валидацию сначала, но это дело поправимое.

Да, там не очень неудобно. Однако, — здесь — это оффтопик, а у нас идут совершенно специфичные разговоры.

Кроме того, можешь вместо этого, попросить у меня через PM скайп — и скорее всего мы будем общаться гораздо быстрее минуя эту байду. Тут (в этой целевой аудитории) — нет смысла спрашивать. На magpcss.org — лучше на инглише. Более того — тебе и не надо дёргать меня то в плане дурных вопросов — это и так ясно. Поэтому я сразу сказал — что я на такое пойду. В общем — это из разряда "последнего китайского" — в том смысле — что, не стесняйся. Я давно тебя заочно знаю, — я не очень разделяю твоего фанатизма в плане того, что ты делаешь, (возможно всё ещё не понял что именно) — но поверь — лучше сделай, а потом выложи код или сделай серию блог-постов которые толком всё объяснят — толка от текущих наших и твоих самим с собой переговоров ИМХО всё равно никаких нет.
Re[2]: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.01.17 06:48
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Serginio1, Вы писали:


S>>Есть идея иметь доступ из TypeScript к методам и свойствам классов .Net.

S>>У меня есть опыт вызова методов .Net объектов из натива https://habrahabr.ru/users/serginio1/topics/

_NN>Если нужна кросс-платформенность возможно будет вариантом собрать всё через Mono с ключом --enable-nacl:

_NN>
_NN>--enable-nacl

_NN>    This configures the Mono compiler to generate code suitable to be used by Google's Native Client: http://code.google.com/p/nativeclient/

_NN>    Currently this is used with Mono's AOT engine as Native Client does not support JIT engines yet.

_NN>


Спасибо. До этого еще дойти надо. Но у меня работает через .Net Core и через рефлексию, но из натива.
и солнце б утром не вставало, когда бы не было меня
Re[2]: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.01.17 06:58
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Здравствуйте, Serginio1, Вы писали:


S>>Есть идея иметь доступ из TypeScript к методам и свойствам классов .Net.


bnk>Для построения UI есть sciter и обертка для него scitersharp например.

bnk>Здесь даже отдельный под-форум есть

bnk>Или тебе это надо не для построения UI?


Мне интересно реализовать универсальную обертку классов Net для использования из натива.

Мы просто можем расширить JS через typescript с использованием классов .Net Core.
Можно достаточно легко перевести приложения на Wpf,UWP и WinForms на Angular 2 и мою прослойку
и солнце б утром не вставало, когда бы не было меня
Re[2]: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.01.17 07:03
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Serginio1, Вы писали:


F>@Serginio1 — я не очень думаю что тут это вообще кому-то реально интересно. Т.е. я на самом деле предлагаю перенести обсуждения или вопросы на http://magpcss.org/ceforum. Более того — если форум поддерживает русский язык — просто пиши по русски в CefGlue разделе. Я там отвечу. Вообще должен. Возможно тебе прийдется пройти валидацию сначала, но это дело поправимое.


F>Да, там не очень неудобно. Однако, — здесь — это оффтопик, а у нас идут совершенно специфичные разговоры.


F>Кроме того, можешь вместо этого, попросить у меня через PM скайп — и скорее всего мы будем общаться гораздо быстрее минуя эту байду. Тут (в этой целевой аудитории) — нет смысла спрашивать. На magpcss.org — лучше на инглише. Более того — тебе и не надо дёргать меня то в плане дурных вопросов — это и так ясно. Поэтому я сразу сказал — что я на такое пойду. В общем — это из разряда "последнего китайского" — в том смысле — что, не стесняйся. Я давно тебя заочно знаю, — я не очень разделяю твоего фанатизма в плане того, что ты делаешь, (возможно всё ещё не понял что именно) — но поверь — лучше сделай, а потом выложи код или сделай серию блог-постов которые толком всё объяснят — толка от текущих наших и твоих самим с собой переговоров ИМХО всё равно никаких нет.


Огромное спасибо! Сейчас сделаю вызовм методов, свойств, делегатов, дженерик методов и асинхронных методов. Выложу, напишу статью.
Потом доделаю поддержку внешних событий, использование объектов и функций JS. Покажу использование динамической компиляции итд

А смысл, это использовать библиотеки .Net Core в сочетании с тем же Angular 2.
Например для торгового оборудования тебе нужно писать отдельный плагин и на C++.
Здесь ты можешь использовать готовые библиотеки под Net Core или написать свои. Итд.

Ну и даже Guid а нормального нет итд
https://habrahabr.ru/post/242459/
и солнце б утром не вставало, когда бы не было меня
Отредактировано 26.01.2017 7:50 Serginio1 . Предыдущая версия . Еще …
Отредактировано 26.01.2017 7:09 Serginio1 . Предыдущая версия .
Re[3]: Использование в TypeScript классов .Net
От: sr_dev  
Дата: 26.01.17 08:17
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Мне интересно реализовать универсальную обертку классов Net для использования из натива.


По идее есть такой способ. Поставить на сборке галочку Com visible (в самом фреймворке вроде все сборки такие), поместить ее в gac, сделать regasm. .Net классы становятся юзабельными в любом нативном приложении (нужна поддержка COM)
опа опа мы воюем с нато
любит хавать этот кал
путинская вата
Re[4]: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.01.17 08:49
Оценка:
Здравствуйте, sr_dev, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>> Мне интересно реализовать универсальную обертку классов Net для использования из натива.


_>По идее есть такой способ. Поставить на сборке галочку Com visible (в самом фреймворке вроде все сборки такие), поместить ее в gac, сделать regasm. .Net классы становятся юзабельными в любом нативном приложении (нужна поддержка COM)


Ну не все это раз.
Есть обертка для .Net объектов через IReflect Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент

Но это COM.
Я же делаю Кроссплатформенный вариант.

Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
1С, Linux, Excel, Word, OpenXML,ADO и Net Core
и солнце б утром не вставало, когда бы не было меня
Re[3]: Использование в TypeScript классов .Net
От: bnk СССР http://unmanagedvisio.com/
Дата: 26.01.17 10:18
Оценка:
Здравствуйте, fddima, Вы писали:

F> Не хочу говорить за ТС — но он весьма грамотен. Уверен что и о скайтере он в курсе. Кроме того, афаик, есть ситуации где скайтер сольет.

F> Спрашиваю ради интереса — как с accesibility у скайтера? Ну т.е. хотя бы виндовс нарратор — работает?

Честно говоря, я не знаю, не заморачивался на accesibility. Можно у автора спросить.
Re[5]: использования CEF в Visual Studio
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.01.17 13:54
Оценка:
Здравствуйте, fddima, Вы писали:

Прошу прощения. Зарегистрировался на форуме. Но что то не могу отправить сообщение.

Задам и здесь. Суть такая

Я вызываю асинхронный метод

var GetStringAsync = CC.GetPromise(TO.Id,"GetStringAsync", []);

GetStringAsync.then(result => alert("Fulfilled: " + result),
    error => alert("Rejected: " + error.message) // Rejected: время вышло!
  );


Который по окончании, вызывает метод С++


void ContextForNetHandlers::AsyncCalBack(const wchar_t* TaskID, bool Successfully, tVariant* ReturnValue)
     {
        

         if (!CefCurrentlyOn(TID_UI)) {
             // Execute on the UI thread.
            // CefPostTask(TID_UI, base::Bind(&AsyncCalBack2, TaskID, Successfully,ReturnValue, CallbackContext));
             CefPostTask(TID_UI, base::Bind(&SetCallBacks::AsyncCalBack, this->scb, TaskID, Successfully, ReturnValue));
             return;
         }

         scb->AsyncCalBack(TaskID, Successfully, ReturnValue);
     }


Вот код SetCallBacks

     //==================== Set CallBacs
     bool SetCallBacks::Execute(const CefString& name,
         CefRefPtr<CefV8Value> object,
         const CefV8ValueList& arguments,
         CefRefPtr<CefV8Value>& retval,
         CefString& exception) {

        
             if (arguments.size() == 1 && arguments[0]->IsFunction()) {
                 AsyncMetodCall = arguments[0];
                 CallbackContext = CefV8Context::GetCurrentContext();
                 cfn->scb = this;
                 return true;
             }
        

         return true;

     }

     void SetCallBacks::AsyncCalBack(const wchar_t* TaskID, bool Successfully, tVariant* ReturnValue)
     {
         CefV8ValueList args;
         CefRefPtr<CefV8Value> retval;
         CefRefPtr<CefV8Exception> exception;


         if (CallbackContext.get() && CallbackContext->Enter()) {

             args.push_back(CefV8Value::CreateBool(true));
             args.push_back(NetObjectToNative::ConvertNetToCef(ReturnValue, true));
             args.push_back(CefV8Value::CreateString(TaskID));

             delete[] TaskID;
             if (AsyncMetodCall->ExecuteFunctionWithContext(CallbackContext, NULL, args)) {
                 if (exception.get()) {
                     // Execution threw an exception.
                 }
                 else {
                     // Execution succeeded.
                 }
             }
             CallbackContext->Exit();
         }
     }


В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков
Да потоки разные. Сейчас буду рыть с очередью сообщений
и солнце б утром не вставало, когда бы не было меня
Отредактировано 27.01.2017 14:12 Serginio1 . Предыдущая версия .
Re[6]: использования CEF в Visual Studio
От: fddima  
Дата: 27.01.17 14:31
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Прошу прощения. Зарегистрировался на форуме. Но что то не могу отправить сообщение.

Первое сообщение нового юзера проходит премодерацию. Подожди денек.

S>Задам и здесь. Суть такая


...

S> В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков

S>Да потоки разные. Сейчас буду рыть с очередью сообщений
По коду несовсем понятно, увы. Это всё где происходит? В рендерере нет UI потока — есть TID_RENDERER, он же главный. Ну это навскидку.
Re[7]: использования CEF в Visual Studio
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.01.17 14:36
Оценка:
Здравствуйте, fddima, Вы писали:


S>> В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков

S>>Да потоки разные. Сейчас буду рыть с очередью сообщений
F> По коду несовсем понятно, увы. Это всё где происходит? В рендерере нет UI потока — есть TID_RENDERER, он же главный. Ну это навскидку.

Огромное спасибо!!!
Ну скоро выложу рабочий вариант с async и прочими плюшками. Уже виден свет в конце туннеля
и солнце б утром не вставало, когда бы не было меня
Re: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.01.17 15:00
Оценка:
Здравствуйте, Serginio1, Вы писали:
Сделал и работает на Angular 2 и TypeScript


 let Net = NetObject.NetWrapper;
        let del = NetObject.FlagDeleteObject;
        //let SB = Net.Новый("System.Text.StringBuilder");
        let StringBuilder = Net.Тип("System.Text.StringBuilder");
        let SB = new StringBuilder();
        this.ResultExecute.push(new ResTest("SB", SB));
        var res = SB.Append("Первая строка");
        res(del);

        var ToStr = SB.ToString();
        this.ResultExecute.push(new ResTest("Tostring=", ToStr));

        SB.Capacity=40;

        res = SB._Capacity;
        this.ResultExecute.push(new ResTest("_Capacity=", res));
        SB(del);
        let Тестовый = Net.Тип("TestDllForCoreClr.Тестовый", "TestDllForCoreClr");
        var TO = new Тестовый("Свойство из Конструктора");
         var resAsync = await TO.async.GetStringAsync();
  
        this.ResultExecute.push(new ResTest("GetStringAsync", resAsync));

        res = TO.ДженерикМетод(1, 2, 5);
        this.ResultExecute.push(new ResTest("ДженерикМетод с выводом типов ", res));

        let Int32 = Net.GetType("System.Int32");

        res = TO.ДженерикМетод([Int32, Int32], 1, 2, 5);
        this.ResultExecute.push(new ResTest("ДженерикМетод с аргeментами типов ", res));


        var Dictionary2 = Net.GetType("System.Collections.Generic.Dictionary`2", "System.Collections");
        var DyctionaryIS = Net.GetGenericType(Dictionary2, "System.Int32", "System.String");
        var D = new DyctionaryIS();

        res = TO.ДженерикМетод2(D, 99, "Hello");

        this.ResultExecute.push(new ResTest("ДженерикМетод2 с выводом типов ", res));

        res = TO.ДженерикМетод2([Int32, "System.String"],D, 99, "Hello");
        this.ResultExecute.push(new ResTest("ДженерикМетод2 с аргументами ", res));

        var task = TO.GetStringAsync();
        res = await Net.async.ReturnParam(task);
       

        this.ResultExecute.push(new ResTest("выполнение полученной задачи асинхронно ", res));

        var array = Net.GetNetArray(1, "Привет", 4.4);

        for (let item of array)
            this.ResultExecute.push(new ResTest("Элемент ", item));

        NetObject.DeleteNetObjets(Int32, task, D, DyctionaryIS, Dictionary2, TO, Тестовый, StringBuilder, array);

        this.ResultExecute.push(new ResTest("Количество элементов в хранилище ", Net.КоличествоЭлементовВХранилище()));
        this.ResultExecute.push(new ResTest("Первый удаленный ", Net.FirstDeleted()));



Отличие от C# это
Для получения свойства нужно добавить "_"
 res = SB._Capacity;


Для вызова асинхронного метода нужно добавить ключевое слово async
var resAsync = await TO.async.GetStringAsync();


Для вызова дженерик метода, если нельзя вывести типы по параметрам то параметры указываем в массиве
res = TO.ДженерикМетод2([Int32, "System.String"],D, 99, "Hello");



Буду рад критике и предложениям.
Какие примеры лучше дать для статьи.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 30.01.2017 15:08 Serginio1 . Предыдущая версия . Еще …
Отредактировано 30.01.2017 15:01 Serginio1 . Предыдущая версия .
Re: Написал статью
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.02.17 11:43
Оценка:
Здравствуйте, Serginio1, Вы писали:
CEF,Es6,Angular 2,TypeScript использование классов .Net Core для расширения возможностей
и солнце б утром не вставало, когда бы не было меня
Re[2]: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.02.17 12:22
Оценка:
Здравствуйте, fddima, Вы писали:
Выложил статью CEF,Es6,Angular 2,TypeScript использование классов .Net Core для расширения возможностей

но там много руслиша. Стоит ли в таком виде поделится этой статьей на форуме CEF?
и солнце б утром не вставало, когда бы не было меня
Re[2]: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.02.17 06:56
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Serginio1, Вы писали:


F>@Serginio1 — я не очень думаю что тут это вообще кому-то реально интересно. Т.е. я на самом деле предлагаю перенести обсуждения или вопросы на http://magpcss.org/ceforum. Более того — если форум поддерживает русский язык — просто пиши по русски в CefGlue разделе. Я там отвечу. Вообще должен. Возможно тебе прийдется пройти валидацию сначала, но это дело поправимое.


F>Да, там не очень неудобно. Однако, — здесь — это оффтопик, а у нас идут совершенно специфичные разговоры.


F>Кроме того, можешь вместо этого, попросить у меня через PM скайп — и скорее всего мы будем общаться гораздо быстрее минуя эту байду. Тут (в этой целевой аудитории) — нет смысла спрашивать. На magpcss.org — лучше на инглише. Более того — тебе и не надо дёргать меня то в плане дурных вопросов — это и так ясно. Поэтому я сразу сказал — что я на такое пойду. В общем — это из разряда "последнего китайского" — в том смысле — что, не стесняйся. Я давно тебя заочно знаю, — я не очень разделяю твоего фанатизма в плане того, что ты делаешь, (возможно всё ещё не понял что именно) — но поверь — лучше сделай, а потом выложи код или сделай серию блог-постов которые толком всё объяснят — толка от текущих наших и твоих самим с собой переговоров ИМХО всё равно никаких нет.


Написал поддержку событий. Но вот, что мне подумалось. CEF мощная штука. Браузер с неограниченными возможностями расширения за счет использования нативного кода.
Но вот активность на том же форуме не нулевая, но единичная. Статей толковых мало. Можешь посоветуешь русскоязычные ссылки, я их в статью включу.
и солнце б утром не вставало, когда бы не было меня
Re[10]: Использование в TypeScript классов .Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.02.17 09:26
Оценка: 75 (1)
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>>Десктоп как рынок жив только для профессионального софта.

S>> Корпоративный софт является профессиональным? Я в нем работаю.
S>Да.

S>>Поэтому я и вышел с опросом идеи. Но кстати есть кроссплатформенная замена COM XPCOM

S>Которая просто костыль для портирования аддонов? У меня плохие новости.


S>>Но я не пойму в чем идея то плоха?

S>Сама идея — замечательная, но только пока мы обсуждаем в духе "за всё хорошее и против всего плохого". Как только переходим к реальной жизни, так сразу начинаются реальные проблемы. Поддержка там, перфоманс, простота использования, наличие специалистов на рынке, вот это всё.

Вот реализовал
CEF, ES6, Angular 2, TypeScript использование классов .Net Core для расширения возможностей


CEF, Angular 2 использование событий классов .Net Core

Саму разработку можно разделить на 3 части
1. Хранение и вызов методов объектов на стороне .Net через отображение и нативных методов для вызовов событий, асинхронных методо и выделения памяти
2. Маршалинг между JS и NET на стороне CEF на С++
3. Proxy на стороне JS


По первому пункту. То это по сути реализация метода Type InvokeMember

Просто я добавил поддержку методов с параметрами массивами, параметрами по умолчанию, авто вывод типа для дженерик методов,
поиск методов расширений.
В этом заинтересована сама MS. У них есть нехилая библиотека для использования классов .Net из натива основанная правда на COM.

Я думаю, что это в их интересах развить эту идею.

Что касается CEF то тут мне пришлось вспоминать и учить C++. Но даже моих навыков оказалось достаточно, что бы сделать обертку. Кода там не много.

Покси на стороне JS составляет всего 500 строчек.

Но другое дело, что я никто и звать меня никак. За неделю разработку скачали всего 5 человек.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 09.02.2017 12:44 Serginio1 . Предыдущая версия . Еще …
Отредактировано 09.02.2017 9:38 Serginio1 . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.