Pull to refresh
17
0
Смирнов Сергей @Serginio1

Программист

Send message
Мы говорим про мою проект. Там доступ к свойствам и методам производится через рефлексию. А в рефлексии все боксится
Спасибо! Я стараюсь. Сейчас переписываю эвенты на инглиш
bool res = mD->pCallAsFunc(Target, MethodMame.c_str(), &RetVal, Params, argCount, &Error);


вызывается статическая функция на стороне .Net
 public static bool CallAsFunc(int Target, IntPtr ИмяМетодаPtr, IntPtr ReturnValue, IntPtr МассивПараметров, int РазмерМассива, IntPtr ErrorPtr)
        {
            object result = null;
            var res = CallAsFuncAll(Target,ИмяМетодаPtr,МассивПараметров,РазмерМассива,ErrorPtr, out result);

            if (!res)
                return res;

            bool IsReturnValue = ReturnValue != IntPtr.Zero;

            if (IsReturnValue)
                РаботаСВариантами.УстановитьОбъектВIntPtr(ОбернутьОбъект(result), ReturnValue);
            else if (result is AutoWrap)
            {
                AutoWrap temp = result as AutoWrap;
                СписокОбъектов.RemoveKey(temp.ИндекасВСписке);
            }
            return true;

        }
Ту не смотрел код Test.html там есть тест
var  SB = window.CallNetMethod(0,"Новый",["System.Text.StringBuilder"]);

		var  res = window.CallNetMethod(SB.Id,"Append",["Первая строка"]);
                window.DeleteNetObject(res.Id);

		var ToStr= window.CallNetMethod(SB.Id,"ToString");
	alert(ToStr);


                 window.CallNetPropertySet(SB.Id,"Capacity",40);
                
                 res=window.CallNetPropertyGet(SB.Id,"Capacity");
                 alert(res);


Вызывается Handler CEF.

 bool CallNetObjectFunction::Execute(const CefString& name,
		CefRefPtr<CefV8Value> object,
		const CefV8ValueList& arguments,
		CefRefPtr<CefV8Value>& retval,
		CefString& exception)  {


		const size_t argumentsCount = arguments.size();
		vector<wstring> savedstrings;
		NetObjectToNative::tVariant* Params = nullptr;

		int Target = arguments[0]->GetIntValue();
		wstring MethodMame = arguments[1]->GetStringValue().ToWString();

		CefRefPtr<CefV8Value> params;

		size_t  argCount = 0;
		if (argumentsCount == 3)
		{


			params = arguments[2];

			if (!params->IsArray())
			{
				exception = CefString(L"Для вызова метода 3 параметр должен быть массивом");
				return true;

			}
			argCount = params->GetArrayLength();


		}

		if (argCount > 0)
		{
			savedstrings.reserve(argCount);
			Params = new NetObjectToNative::tVariant[argumentsCount];
			NetObjectToNative::tVariant* Param = Params;

			for (size_t i = 0; i < argCount; ++i)
			{

				NetObjectToNative::ConvertCEFtoNet(params->GetValue(i), &Param[i], savedstrings);
			}

		}
		wchar_t*  Error = nullptr;
		NetObjectToNative::tVariant RetVal;

		bool res = mD->pCallAsFunc(Target, MethodMame.c_str(), &RetVal, Params, argCount, &Error);

		if (res)
		{

			retval = NetObjectToNative::ConvertNetToCef(&RetVal, true);
		}
		else
		{
			if (Error)
				exception = CefString(std::wstring(Error));
			delete Error;
		}

		if (Params) delete[] Params;

		return true;
	}
Да set_Item
Можешь почитать Использование классов .Net в 1С для новичков

Ну так конечно не получится. Пока не поддерживаются JS объекты.
Но они будут поддерживаться правда только на время вызова.

Кроме того можно использовать динамическую компиляцию
.Net Core, 1C, динамическая компиляция, Scripting API
Я же написал в чем отличие
Прежде всего видим главные отличия от C#. Для получения свойства нужно добавить "_"

let Default = Configuration._Default;

Для вызова асинхронного метода нужно добавить ключевое слово async:

let document = await Context.async.OpenAsync(address);

Для вызова дженерик метода, если нельзя вывести типы по параметрам то аргументы указываем в массиве:

let rows = ApiExtensions.QuerySelectorAll([IHtmlTableRowElement], document, rowSelector);

Ну и главное, нужно вручную удалить ссылку на объект со стороны .Net

Строки копируются.
Я никого не заставляю использовать мой продукт, я делюсь опытом.
Я в 1С прекрасно совмещаю как .Net объекты так и 1С. И никаких неудобств мне это не приносит. А здесь в отличие от 1С я могу прикрутить типизацию
Структуры боксятся и можно вызывать методы наравне со статческими методами, методы дженериков с автовыводом типа. Поддержка параметров по умлчанию, params
Мало того еще есть и пример

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

Как это нельзя. В первом же примере мы работаем исключительно с объектами.
https://github.com/AngleSharp/AngleSharp

При этом этом в асинхронном методе оговаривается
 //Метод расширения
            //Task<IDocument> OpenAsync(this IBrowsingContext context, string address);
            let document = await Context.async.OpenAsync(address);
            // Не могу установить результат асинхронной функции класс Proxy с Target fuction
            // Поэтому для объектов нужно вручную обернуть
            document = NetObject.WrapResult(document, true);
Так и будет
let value=dict.get_Item("abc");


К сожалению в JS [] уже забиты для доступа свойств.

Ты это как хочешь называй. Но это по сути и есть внепроцеесный сервер, раз ты к нему обращаешься.
Угу чем это отличие от HTTP запроса? Я знаю что за классы я использую.
Ну и чем ремотинг от HTTP запроса отличается?
Через await и увидит. Сейчас прикручиваю события.

Ну а как ты же говоришь о превосходстве out процессов. А значит есть сервер.
Я аргументиру это тем, что писать на один процес легче.
При этом обработку данных можно вынести в .Net сборку,
а там где скорость не критична можно использовать стандартные библиотеки.
Есть большой выбор в отличие от твоего подхода. За каждой мелочью премся на сервер.
Кто то выбирает один процесс, а кто то как ты несколько.
Что и так было ясно.
Я тебе сказал, что там основное время это получение данных с сайта. Если ты не веришь, то сам и проверь.
Для меня как раз легче использовать мою разработку. Но у каждого свои предпочтения.
На самом деле, что касается 1С, то там на вопрос почему вы не используете мою разработку отвечают, что ты же не 1С.

Я ни кто, и зовут меня ни как. Но тот же Electron будут с удовольствием использовать ибо…
С тобой тут не только запутаешься. Я и работаю и тебе отвечаю.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity