Короткий ответ — нет.
Ты и в обычном .net их толком не вызовешь без type library или IDispatch потому что
а) для вирт. метода нужно знать индекс в таблице вируальных функций
б) этих таблиц может быть несколько, и надо знать индекс таблицы
в) данные базового класса могут иметь смещение и его тоже нужно знать
Извраты есть, но о них рассказывать нет никакого желания, потому что гомосятина
Re[2]: .Net Core Вызов виртуальных методов нативных объектов
Здравствуйте, rm822, Вы писали:
R>Короткий ответ — нет. R>Ты и в обычном .net их толком не вызовешь без type library или IDispatch потому что R>а) для вирт. метода нужно знать индекс в таблице вируальных функций
Ну так описывая класс виртуальными методами мы и описываем VMT
По сути это ничем не отличается от IUnknown R>б) этих таблиц может быть несколько, и надо знать индекс таблицы
Это как? Интерфейсы и множественное наследование не рассматриваем. Только VMT. При этом на С++ нет проблем их использовать. R>в) данные базового класса могут иметь смещение и его тоже нужно знать
Данные не интересуют. Интересуют только объект первым полем является ссылка на VMT.
И описание этой VMT на C#. И почему это не сделать для совместимости в .Net Core c нативным кодом?
Здравствуйте, turbocode, Вы писали:
S>> Или другой интерфейс для доступа к виртуальным методам С++ класса, без методов IUncknown напрямую?
T>Нет, нужно завернуть С++ в COM библиотеку.
Для .Net Core пойдет?
и солнце б утром не вставало, когда бы не было меня
Re[3]: .Net Core Вызов виртуальных методов нативных объектов
Здравствуйте, Serginio1, Вы писали:
S> Возможно ли вызвать виртуальные методы С++ классов из .Net Core.
В мсдн пишут что в принципе можно, но саму структуру классов с++ надо заранее проектировать под интеграцию с .net. Для остальных случаев рекомендуют оборачивать общение с классами с++ в с-api
Re[4]: .Net Core Вызов виртуальных методов нативных объектов
Здравствуйте, turbocode, Вы писали:
T>>>Нет, нужно завернуть С++ в COM библиотеку. S>> Для .Net Core пойдет?
T>Думаю что пойдет при условии что ты согласен потерять переносимость.
нет мне нужна кроссплатформенность. На самом деле
Здравствуйте, α, Вы писали:
α>Здравствуйте, Serginio1, Вы писали:
S>> Возможно ли вызвать виртуальные методы С++ классов из .Net Core.
α>В мсдн пишут что в принципе можно, но саму структуру классов с++ надо заранее проектировать под интеграцию с .net. Для остальных случаев рекомендуют оборачивать общение с классами с++ в с-api
Мне как раз и нужно вызывать нативные методы из .Net
А чем тебе это поможет?
Я не слышал чтобы в .Net Core была возможность создавать кроссплатформенные COM объекты (да и еще на С++). P.S. Было бы неплохо конечно, но думаю этого мы никогда не дождемся.
Re[6]: .Net Core Вызов виртуальных методов нативных объектов
T>А чем тебе это поможет? T>Я не слышал чтобы в .Net Core была возможность создавать кроссплатформенные COM объекты (да и еще на С++). P.S. Было бы неплохо конечно, но думаю этого мы никогда не дождемся.
S> Так суть COM это VMT. А она по сути кроссплатформенна.
С каких это пор? Можно примеры таких С++ COM объектов?
P.S. Я не спорю что MS мог для своих нужд это сделать, но для общего использования ничего подобного нету.
Re[8]: .Net Core Вызов виртуальных методов нативных объектов
Здравствуйте, turbocode, Вы писали:
S>> Так суть COM это VMT. А она по сути кроссплатформенна.
T>С каких это пор? Можно примеры таких С++ COM объектов? T>P.S. Я не спорю что MS мог для своих нужд это сделать, но для общего использования ничего подобного нету.
Ну я тебе показал ICLRRuntimeHost2.
Так суть интерфейса это VMT. А классы с виртуальными методами кроссплатформенны.
В 1С это прекрасно работает
class IInitDoneBase
{
public:
virtual ~IInitDoneBase() {}
/// Initializes component
/**
* @param disp - 1C:Enterpise interface
* @return the result of
*/virtual bool ADDIN_API Init(void* disp) = 0;
/// Sets the memory manager
/*
* @param mem - pointer to memory manager interface.
* @return the result of
*/virtual bool ADDIN_API setMemManager(void* mem) = 0;
/// Returns component version
/**
* @return - component version (2000 - version 2)
*/virtual long ADDIN_API GetInfo() = 0;
/// Uninitializes component
/**
* Component here should release all consumed resources.
*/virtual void ADDIN_API Done() = 0;
};
///////////////////////////////////////////////////////////////////////////
/**
* The given interface defines methods that are intented to be used by the Platform
*/
/// Interface describing extension of language.
S> Ну я тебе показал ICLRRuntimeHost2.
Это внутренности, для себя MS может сделать какой то кроссплатформенный обрубок COM, но это не значит что ты сможешь этим воспользоваться.
S> Так суть интерфейса это VMT. А классы с виртуальными методами кроссплатформенны. S> В 1С это прекрасно работает
[example skiped]
Не знаю что там в 1С но в твоем примере COM-ом и не пахнет.
Re[10]: .Net Core Вызов виртуальных методов нативных объекто
Здравствуйте, turbocode, Вы писали:
T>>>Не знаю что там в 1С но в твоем примере COM-ом и не пахнет. S>> COM это те же виртуальные методы. Та же VMT (vtbl). S>>https://msdn.microsoft.com/ru-ru/library/5hhehwba.aspx S>>http://www.developing.ru/com/iunknown.html
T>И чем тебе это поможет? Инструмента создавать кроссплатформенные С++ COM объекты нету так как MFC/ATL не кроссплатформенны.
VMT кроссплатформенна. Мне не нужен COM как таковой. Мне нужен контракт на основе VMT между нативным и манагед кодом
и солнце б утром не вставало, когда бы не было меня
Re[13]: .Net Core Вызов виртуальных методов нативных объекто
S>VMT кроссплатформенна. Мне не нужен COM как таковой. Мне нужен контракт на основе VMT между нативным и манагед кодом
Не будет COM-а не будет и контракта, точнее бинарной совместимости. Но если тебе не нужно строить объектные модели то как сказали тебе ниже сделай себе сишную обертку и не парся.
Re[14]: .Net Core Вызов виртуальных методов нативных объекто
Здравствуйте, turbocode, Вы писали:
S>>VMT кроссплатформенна. Мне не нужен COM как таковой. Мне нужен контракт на основе VMT между нативным и манагед кодом
T>Не будет COM-а не будет и контракта, точнее бинарной совместимости. Но если тебе не нужно строить объектные модели то как сказали тебе ниже сделай себе сишную обертку и не парся.
Интересно существует ли возможность использовать интерфейсы или виртуальные методы?
По сути то это несложно если соблюдать тип вызова и VMT
Я и не особо парюсь.
и солнце б утром не вставало, когда бы не было меня
Re[15]: .Net Core Вызов виртуальных методов нативных объекто
S> Интересно существует ли возможность использовать интерфейсы или виртуальные методы?
Напрямую нет, только: 1. С-style обертка; 2. COM; 3. грязный хак;