Обрабатывать сгенерированные с # события в firebreath PluginAPI.cpp с помощью COM Callable Wrapper
Помогает ли в этом вопросе JSCallBack в Firebreath? Потому что то, что я только что видел, обрабатывает только события, произошедшие в проекте firebreath(native C++). Я здесь? Я использовал концепцию интерфейса IConnectionPoint для установления соединения с исходящим интерфейсом, содержащим сигнатуры событий. Мой код очень похож на этот пост.
Также я нашел эту информацию относительно Соединения COM с клиентом. Теперь задайте вопрос: должен ли мой класс PluginAPI реализовать этот исходящий интерфейс в файле PluginAPI.h? Как это,
class PluginAPI : public FB::JSAPIAuto, public ManagedDLL::ICalculatorEvents
{
//register methods
}
Если так, то это поднимает 2 ошибки
Рассказ не может создать экземпляр абстрактного класса. Указывает мне на эти строки make_shared.hpp
шаблон<класс T, класс A1, класс A2>boost::shared_ptr
make_shared( A1 && a1, A2 && a2) { boost::shared_ptr pt( static_cast ( 0), BOOST_SP_MSD( T)); boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt ); void * pv = pd->address(); ::new( pv ) T( ////HERE boost::detail::sp_forward<A1>( a1 ), boost::detail::sp_forward<A2>( a2 ) );
и 2. для alignment_of.hpp
template <typename T>
struct alignment_of_hack
{
char c;
T t; ///HERE
alignment_of_hack();
};
Застрял здесь на последние 2 дня. Также любой обходной путь для этого.
1 ответ
Не знаю ничего о взаимодействии C#, которое вы пытаетесь сделать, но я могу вам сказать, что проблема, с которой вы сталкиваетесь с "не может создать экземпляр абстрактного класса", заключается в том, что вы расширяете ManagedDLL::ICalculatorEvents, и это, предположительно, абстрактный базовый класс, Это означает, что вам нужно реализовать чисто виртуальные функции, которые находятся в этом классе.
Кроме этого я понятия не имею. Одной из идей может быть разделение кода FireBreath и кода вызова COM и создание класса, который вы будете использовать в качестве моста. Вместо того, чтобы вносить изменения в свой объект PluginCore, который уже тесно связан с огненным дыханием, создайте новый объект, который может стать мостом, и сделайте с этим странные вещи.
Просто мысль; Я думаю, что это упростит вещи, хотя, потому что тогда вы могли бы задавать вопросы, которые были бы только о стороне COM или только о FireBreath. Когда вы смешиваете их, вы попадаете в ситуации, когда люди не отвечают, потому что они знают только одно или другое и не знают, как та половина, которую они не понимают, может влиять на вещи =]