Сообщение Re[90]: Java vs C# vs C++ от 11.10.2015 19:48
Изменено 11.10.2015 19:58 Serginio1
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
_>>>Аааа, так оно ещё и через COM это делается... ) Тогда уж точно никакой разницы с другими языками нет, причём уже прямо сейчас. Т.е. банально реализуем соответствующий COM интерфейс и без проблем используем его в 1C. Не знаю правда зачем, но делается это тривиально. )))
S>> Тебе нужно делать обертку Idispatch над объектом, типом. В Net это делается через Reflection к любому типу, объекту
S>>Раз это элементарно забацайка. В той статье класс оборачивает любой объект, тип. Поддержка энумераторов.
S>>Давай прямо сейчас.
S>> Это еще раз подтверждение того, что ты невнимательно читаешь ссылки
S>>Что было понятно то основной метод такой обертки для вызова свойства метода реального объекта.
EP>Вот конкретный пример, правда там обвёртка к Python, а не IDispatch, но тем не менее:
EP>
EP>
EP>Помимо этого есть автоматические генераторы клея между языками типа SWIG — там даже методы перечислять не нужно.
Ну вы совсем, что ли не читаете? Автоматически любой тип, объект. Или для всех возможных классов будете клей городить?
И как правило свойства класса это не простые типы, а другие классы. Методы тоже принимают параметры в виде объектов. Вызов статических методов класса итд.
EP>Здравствуйте, Serginio1, Вы писали:
_>>>Аааа, так оно ещё и через COM это делается... ) Тогда уж точно никакой разницы с другими языками нет, причём уже прямо сейчас. Т.е. банально реализуем соответствующий COM интерфейс и без проблем используем его в 1C. Не знаю правда зачем, но делается это тривиально. )))
S>> Тебе нужно делать обертку Idispatch над объектом, типом. В Net это делается через Reflection к любому типу, объекту
S>>Раз это элементарно забацайка. В той статье класс оборачивает любой объект, тип. Поддержка энумераторов.
S>>Давай прямо сейчас.
S>> Это еще раз подтверждение того, что ты невнимательно читаешь ссылки
S>>Что было понятно то основной метод такой обертки для вызова свойства метода реального объекта.
EP>Вот конкретный пример, правда там обвёртка к Python, а не IDispatch, но тем не менее:
EP>
EP>// наш класс:
EP>struct World
EP>{
EP> void set(std::string msg) { this->msg = msg; }
EP> std::string greet() { return msg; }
EP> std::string msg;
EP>};
EP>// указываем те методы которых хотим экспортировать:
EP>BOOST_PYTHON_MODULE(hello)
EP>{
EP> class_<World>("World")
EP> .def("greet", &World::greet)
EP> .def("set", &World::set)
EP> ;
EP>}
EP>// можно сократить до вот такого варианта:
EP>PYTHON_MODULE_SIMPLIFIED
EP>(
EP> hello,
EP> World,
EP> greet, set
EP>)
EP>
Использование:EP>
>>>> import hello
>>>> planet = hello.World()
>>>> planet.set('howdy')
>>>> planet.greet()
EP>'howdy'
EP>
EP>Помимо этого есть автоматические генераторы клея между языками типа SWIG — там даже методы перечислять не нужно.
Ну вы совсем, что ли не читаете? Автоматически любой тип, объект. Или для всех возможных классов будете клей городить?
И как правило свойства класса это не простые типы, а другие классы. Методы тоже принимают параметры в виде объектов. Вызов статических методов класса итд.
Re[90]: Java vs C# vs C++
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
_>>>Аааа, так оно ещё и через COM это делается... ) Тогда уж точно никакой разницы с другими языками нет, причём уже прямо сейчас. Т.е. банально реализуем соответствующий COM интерфейс и без проблем используем его в 1C. Не знаю правда зачем, но делается это тривиально. )))
S>> Тебе нужно делать обертку Idispatch над объектом, типом. В Net это делается через Reflection к любому типу, объекту
S>>Раз это элементарно забацайка. В той статье класс оборачивает любой объект, тип. Поддержка энумераторов.
S>>Давай прямо сейчас.
S>> Это еще раз подтверждение того, что ты невнимательно читаешь ссылки
S>>Что было понятно то основной метод такой обертки для вызова свойства метода реального объекта.
EP>Вот конкретный пример, правда там обвёртка к Python, а не IDispatch, но тем не менее:
EP>
EP>
EP>Помимо этого есть автоматические генераторы клея между языками типа SWIG — там даже методы перечислять не нужно.
Ну вы совсем, что ли не читаете? Автоматически любой тип, объект. Или для всех возможных классов будете клей городить?
И как правило свойства класса это не простые типы, а другие классы. Методы тоже принимают параметры в виде объектов. Вызов статических методов класса итд.
Удосужтесь хоть прочитать код. Там совсем другая песня.
Еще раз любой класс или объект оборачивается вокруг
Конструкторы
Все мы имеем доступ к любому объекту ил типу
EP>Здравствуйте, Serginio1, Вы писали:
_>>>Аааа, так оно ещё и через COM это делается... ) Тогда уж точно никакой разницы с другими языками нет, причём уже прямо сейчас. Т.е. банально реализуем соответствующий COM интерфейс и без проблем используем его в 1C. Не знаю правда зачем, но делается это тривиально. )))
S>> Тебе нужно делать обертку Idispatch над объектом, типом. В Net это делается через Reflection к любому типу, объекту
S>>Раз это элементарно забацайка. В той статье класс оборачивает любой объект, тип. Поддержка энумераторов.
S>>Давай прямо сейчас.
S>> Это еще раз подтверждение того, что ты невнимательно читаешь ссылки
S>>Что было понятно то основной метод такой обертки для вызова свойства метода реального объекта.
EP>Вот конкретный пример, правда там обвёртка к Python, а не IDispatch, но тем не менее:
EP>
EP>// наш класс:
EP>struct World
EP>{
EP> void set(std::string msg) { this->msg = msg; }
EP> std::string greet() { return msg; }
EP> std::string msg;
EP>};
EP>// указываем те методы которых хотим экспортировать:
EP>BOOST_PYTHON_MODULE(hello)
EP>{
EP> class_<World>("World")
EP> .def("greet", &World::greet)
EP> .def("set", &World::set)
EP> ;
EP>}
EP>// можно сократить до вот такого варианта:
EP>PYTHON_MODULE_SIMPLIFIED
EP>(
EP> hello,
EP> World,
EP> greet, set
EP>)
EP>
Использование:EP>
>>>> import hello
>>>> planet = hello.World()
>>>> planet.set('howdy')
>>>> planet.greet()
EP>'howdy'
EP>
EP>Помимо этого есть автоматические генераторы клея между языками типа SWIG — там даже методы перечислять не нужно.
Ну вы совсем, что ли не читаете? Автоматически любой тип, объект. Или для всех возможных классов будете клей городить?
И как правило свойства класса это не простые типы, а другие классы. Методы тоже принимают параметры в виде объектов. Вызов статических методов класса итд.
Удосужтесь хоть прочитать код. Там совсем другая песня.
Еще раз любой класс или объект оборачивается вокруг
public class AutoWrap : IReflect
{
// Два основных поля Объект и его тип
protected internal object O = null;
protected internal Type T = null;
Конструкторы
public AutoWrap(object obj)
{
O = obj;
if (O is Type)
{
T = O as Type;
ЭтоТип = true;
}
else
{
T = O.GetType();
ЭтоТип = false;
}
}
// Бывает нужно обратиться не к статическим методам, а к методат типа
public AutoWrap(object obj, Type type)
{
O = obj;
T = type;
ЭтоТип = false;
}
public object ТипКакОбъект(object Тип)
{
if (Тип is AutoWrap)
Тип = ((AutoWrap)Тип).T;
Type T = ((Type)Тип);
return new AutoWrap(T, T.GetType());
}
Все мы имеем доступ к любому объекту ил типу
public object СоздатьОбъект(object Тип, params object[] argOrig)
{
// MessageBox.Show(Тип.ToString() + " параметров=" + args.Length.ToString());
var res = ТипДляСоздатьОбъект(Тип);
object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig);
return AutoWrap.ОбернутьОбъект(System.Activator.CreateInstance(res, args));
}