0

Firebreath の JSCallBack はこの問題に役立ちますか?私が見たのは、firebreath (ネイティブ c++) プロジェクトで発生したイベントのみを処理するためです。私はここにいますか? IConnectionPoint インターフェイスの概念を使用して、イベント シグネチャを含む発信インターフェイスとの接続を確立しました。私のコードはこの投稿によく似ています。

また、クライアントとの COM の接続に関するこの情報も見つけました。ここで質問があります: 私の PluginAPI クラスは、この Outgoing インターフェイスを PluginAPI.h ファイルに実装する必要がありますか? このような、

class PluginAPI : public FB::JSAPIAuto, public ManagedDLL::ICalculatorEvents
{
//register methods
}

もしそうなら、それは2つのエラーを引き起こしています

  1. 抽象クラスをインスタンス化できないことを伝えます。make_shared.hpp のこれらの行を教えてください

    template< class T, class A1, class A2 > boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2 ) { boost::shared_ptr< T > pt( static_cast< T* >( 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 日間立ち往生。また、これに対する回避策。

4

1 に答える 1

1

あなたがやろうとしているC#相互運用については何も知りませんが、「抽象クラスをインスタンス化できません」という問題は、ManagedDLL::ICalculatorEventsを拡張していて、おそらく抽象基本クラスであるためだと言えます。つまり、そのクラスにある純粋仮想関数を実装する必要があります。

それ以外は、まったくわかりません。アイデアの 1 つは、FireBreath コードと COM 呼び出しコードを分離し、ブリッジとして使用するクラスを作成することです。すでに Firebreath と密接に結びついている PluginCore オブジェクトを変更するのではなく、橋渡しとなる新しいオブジェクトを作成し、それに対して奇妙なことを行います。

ちょっとした考え; ただし、COM 側または FireBreath に関する質問をすることができるので、物事が単純化されると思います。それらを混在させると、人々はどちらか一方しか知らず、理解していない半分が物事にどのように影響するかを知らないため、答えられない状況になります =]

于 2013-07-03T14:42:14.197 に答える