@Serginio1 — я не очень думаю что тут это вообще кому-то реально интересно. Т.е. я на самом деле предлагаю перенести обсуждения или вопросы на http://magpcss.org/ceforum. Более того — если форум поддерживает русский язык — просто пиши по русски в CefGlue разделе. Я там отвечу. Вообще должен. Возможно тебе прийдется пройти валидацию сначала, но это дело поправимое.
Да, там не очень неудобно. Однако, — здесь — это оффтопик, а у нас идут совершенно специфичные разговоры.
Кроме того, можешь вместо этого, попросить у меня через PM скайп — и скорее всего мы будем общаться гораздо быстрее минуя эту байду. Тут (в этой целевой аудитории) — нет смысла спрашивать. На magpcss.org — лучше на инглише. Более того — тебе и не надо дёргать меня то в плане дурных вопросов — это и так ясно. Поэтому я сразу сказал — что я на такое пойду. В общем — это из разряда "последнего китайского" — в том смысле — что, не стесняйся. Я давно тебя заочно знаю, — я не очень разделяю твоего фанатизма в плане того, что ты делаешь, (возможно всё ещё не понял что именно) — но поверь — лучше сделай, а потом выложи код или сделай серию блог-постов которые толком всё объяснят — толка от текущих наших и твоих самим с собой переговоров ИМХО всё равно никаких нет.
Здравствуйте, _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 и через рефлексию, но из натива.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, Serginio1, Вы писали:
S>>Есть идея иметь доступ из TypeScript к методам и свойствам классов .Net.
bnk>Для построения UI есть sciter и обертка для него scitersharp например. bnk>Здесь даже отдельный под-форум есть
bnk>Или тебе это надо не для построения UI?
Мне интересно реализовать универсальную обертку классов Net для использования из натива.
Мы просто можем расширить JS через typescript с использованием классов .Net Core.
Можно достаточно легко перевести приложения на Wpf,UWP и WinForms на Angular 2 и мою прослойку
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, Serginio1, Вы писали:
F>@Serginio1 — я не очень думаю что тут это вообще кому-то реально интересно. Т.е. я на самом деле предлагаю перенести обсуждения или вопросы на http://magpcss.org/ceforum. Более того — если форум поддерживает русский язык — просто пиши по русски в CefGlue разделе. Я там отвечу. Вообще должен. Возможно тебе прийдется пройти валидацию сначала, но это дело поправимое.
F>Да, там не очень неудобно. Однако, — здесь — это оффтопик, а у нас идут совершенно специфичные разговоры.
F>Кроме того, можешь вместо этого, попросить у меня через PM скайп — и скорее всего мы будем общаться гораздо быстрее минуя эту байду. Тут (в этой целевой аудитории) — нет смысла спрашивать. На magpcss.org — лучше на инглише. Более того — тебе и не надо дёргать меня то в плане дурных вопросов — это и так ясно. Поэтому я сразу сказал — что я на такое пойду. В общем — это из разряда "последнего китайского" — в том смысле — что, не стесняйся. Я давно тебя заочно знаю, — я не очень разделяю твоего фанатизма в плане того, что ты делаешь, (возможно всё ещё не понял что именно) — но поверь — лучше сделай, а потом выложи код или сделай серию блог-постов которые толком всё объяснят — толка от текущих наших и твоих самим с собой переговоров ИМХО всё равно никаких нет.
Огромное спасибо! Сейчас сделаю вызовм методов, свойств, делегатов, дженерик методов и асинхронных методов. Выложу, напишу статью.
Потом доделаю поддержку внешних событий, использование объектов и функций JS. Покажу использование динамической компиляции итд
А смысл, это использовать библиотеки .Net Core в сочетании с тем же Angular 2.
Например для торгового оборудования тебе нужно писать отдельный плагин и на C++.
Здесь ты можешь использовать готовые библиотеки под Net Core или написать свои. Итд.
Здравствуйте, Serginio1, Вы писали:
S> Мне интересно реализовать универсальную обертку классов Net для использования из натива.
По идее есть такой способ. Поставить на сборке галочку Com visible (в самом фреймворке вроде все сборки такие), поместить ее в gac, сделать regasm. .Net классы становятся юзабельными в любом нативном приложении (нужна поддержка COM)
опа опа мы воюем с нато
любит хавать этот кал
путинская вата
Здравствуйте, sr_dev, Вы писали:
_>Здравствуйте, Serginio1, Вы писали:
S>> Мне интересно реализовать универсальную обертку классов Net для использования из натива.
_>По идее есть такой способ. Поставить на сборке галочку Com visible (в самом фреймворке вроде все сборки такие), поместить ее в gac, сделать regasm. .Net классы становятся юзабельными в любом нативном приложении (нужна поддержка COM)
Здравствуйте, fddima, Вы писали:
F> Не хочу говорить за ТС — но он весьма грамотен. Уверен что и о скайтере он в курсе. Кроме того, афаик, есть ситуации где скайтер сольет. F> Спрашиваю ради интереса — как с accesibility у скайтера? Ну т.е. хотя бы виндовс нарратор — работает?
Честно говоря, я не знаю, не заморачивался на accesibility. Можно у автора спросить.
Здравствуйте, Serginio1, Вы писали:
S>Прошу прощения. Зарегистрировался на форуме. Но что то не могу отправить сообщение.
Первое сообщение нового юзера проходит премодерацию. Подожди денек.
S>Задам и здесь. Суть такая
...
S> В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков S>Да потоки разные. Сейчас буду рыть с очередью сообщений
По коду несовсем понятно, увы. Это всё где происходит? В рендерере нет UI потока — есть TID_RENDERER, он же главный. Ну это навскидку.
S>> В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков S>>Да потоки разные. Сейчас буду рыть с очередью сообщений F> По коду несовсем понятно, увы. Это всё где происходит? В рендерере нет UI потока — есть TID_RENDERER, он же главный. Ну это навскидку.
Огромное спасибо!!!
Ну скоро выложу рабочий вариант с async и прочими плюшками. Уже виден свет в конце туннеля
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, 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");
Буду рад критике и предложениям.
Какие примеры лучше дать для статьи.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, Serginio1, Вы писали:
F>@Serginio1 — я не очень думаю что тут это вообще кому-то реально интересно. Т.е. я на самом деле предлагаю перенести обсуждения или вопросы на http://magpcss.org/ceforum. Более того — если форум поддерживает русский язык — просто пиши по русски в CefGlue разделе. Я там отвечу. Вообще должен. Возможно тебе прийдется пройти валидацию сначала, но это дело поправимое.
F>Да, там не очень неудобно. Однако, — здесь — это оффтопик, а у нас идут совершенно специфичные разговоры.
F>Кроме того, можешь вместо этого, попросить у меня через PM скайп — и скорее всего мы будем общаться гораздо быстрее минуя эту байду. Тут (в этой целевой аудитории) — нет смысла спрашивать. На magpcss.org — лучше на инглише. Более того — тебе и не надо дёргать меня то в плане дурных вопросов — это и так ясно. Поэтому я сразу сказал — что я на такое пойду. В общем — это из разряда "последнего китайского" — в том смысле — что, не стесняйся. Я давно тебя заочно знаю, — я не очень разделяю твоего фанатизма в плане того, что ты делаешь, (возможно всё ещё не понял что именно) — но поверь — лучше сделай, а потом выложи код или сделай серию блог-постов которые толком всё объяснят — толка от текущих наших и твоих самим с собой переговоров ИМХО всё равно никаких нет.
Написал поддержку событий. Но вот, что мне подумалось. CEF мощная штука. Браузер с неограниченными возможностями расширения за счет использования нативного кода.
Но вот активность на том же форуме не нулевая, но единичная. Статей толковых мало. Можешь посоветуешь русскоязычные ссылки, я их в статью включу.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>>Десктоп как рынок жив только для профессионального софта. S>> Корпоративный софт является профессиональным? Я в нем работаю. S>Да.
S>>Поэтому я и вышел с опросом идеи. Но кстати есть кроссплатформенная замена COM XPCOM S>Которая просто костыль для портирования аддонов? У меня плохие новости.
S>>Но я не пойму в чем идея то плоха? S>Сама идея — замечательная, но только пока мы обсуждаем в духе "за всё хорошее и против всего плохого". Как только переходим к реальной жизни, так сразу начинаются реальные проблемы. Поддержка там, перфоманс, простота использования, наличие специалистов на рынке, вот это всё.
Саму разработку можно разделить на 3 части
1. Хранение и вызов методов объектов на стороне .Net через отображение и нативных методов для вызовов событий, асинхронных методо и выделения памяти
2. Маршалинг между JS и NET на стороне CEF на С++
3. Proxy на стороне JS
По первому пункту. То это по сути реализация метода Type InvokeMember
Просто я добавил поддержку методов с параметрами массивами, параметрами по умолчанию, авто вывод типа для дженерик методов,
поиск методов расширений.
В этом заинтересована сама MS. У них есть нехилая библиотека для использования классов .Net из натива основанная правда на COM.
Я думаю, что это в их интересах развить эту идею.
Что касается CEF то тут мне пришлось вспоминать и учить C++. Но даже моих навыков оказалось достаточно, что бы сделать обертку. Кода там не много.
Покси на стороне JS составляет всего 500 строчек.
Но другое дело, что я никто и звать меня никак. За неделю разработку скачали всего 5 человек.
и солнце б утром не вставало, когда бы не было меня