2013-07-03 43 views
0

JSCallBack in Firebreath對此有幫助嗎?因爲我剛剛看到它只處理髮生在firebreath(native C++)項目中的事件。我就在這裏? 我使用IConnectionPoint接口的概念與包含事件簽名的傳出接口建立連接。我的代碼非常類似於this post使用COM Callable Wrapper處理firebreath PluginAPI.cpp中的c#事件

我還發現這個info regarding Connection of COM with client。現在有一個問題: 我的PluginAPI類是否需要在PluginAPI.h文件中實現此Outgoing接口? 這樣,

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

如果是的話,那麼它的養2個錯誤

  1. 說服力不能實例化抽象類。點我make_shared.hpp的這些線路

    模板< T類,類A1,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天。此外任何解決方法。

回答

1

不知道任何關於C#interop的問題,但您可以告訴您,您遇到的問題「無法實例化抽象類」是因爲您正在擴展ManagedDLL :: ICalculatorEvents,它可能是抽象基類,這意味着您需要實現該類中的純虛函數。

除此之外,我絕對不知道。一個想法可能是保持FireBreath代碼和你的COM調用代碼分離,並創建一個你將用作橋樑的類。而不是修改已經與firebreath緊密相連的PluginCore對象,創建一個新的對象,可以成爲橋樑並做出奇怪的事情。

只是一個想法;不過,我認爲它會簡化一些事情,因爲那時你可以提出一些關於COM端或FireBreath的問題。當你混合他們,你進入那裏的人不回答「因爲他們只知道一個或另一個,不知道他們怎麼不明白的一半可能會影響事情的情況下=]

+0

感謝您的回覆@taxilian !由於某些原因,橋接器(C++/cli)對我們的解決方案不可行!至於錯誤,我直覺地知道這一點。希望你能回答我在第一行提到的問題? –

+1

不,我不認爲JSCallback會幫你一點。不確定你的意思是一座橋不可行?你已經試圖讓你的PluginCore派生對象與它交談,我只是建議你創建另一個對象並使用它來代替使用PluginCore對象。好的一點是,你可以在另一個應用程序中測試它,並在邏輯上將它從與Firebreath綁定的代碼中分離出來。類似於pimpl模式 – taxilian