2012-03-15 43 views
1

我是C++/CLI的新手,我想知道如何使用虛擬方法來包裝非託管C++類來管理和使用C#中的類?C++/CLI:如何使用虛擬方法包裝非託管類來管理和使用C#中的類?

不受管理的C++類:

class IProgression 
{ 
public: 
    virtual ~IProgression(void) {} 
    virtual void sendProgression(int amount, int present) = 0; 
}; 

sendProgression方法被用來發送進度信息到C#層。所以這是回調。

我有哪裏這個進程回調設置其他非託管C++類:

virtual void setProgression(IProgression * pIProgression) = 0; 

所以我需要從C#設置回調接口,以非託管C++通過C++/CLI並獲得進展的信息返回到從非託管C C#++通過C++/CLI。

有人可以提供意見如何實現這一點,因爲我有點困惑與此?

回答

2

你可以這樣做:

public interface IManagedProgression { 
    void SendProgression(int amount, int present); 
}; 

public class Wrapper : public IProgression { 
public: 
    Wrapper(IManagedProgression^ c) 
    { 
     callBack = c; 
    } 


    void sendProgression(int amount, int present) 
    { 
     callBack->SendProgression(amount, present); 
    } 

private: 
    gcroot<IManagedProgression^> callBack; 
}; 

然後就可以實現在C#中IManagedProgression或另一種語言,並在包裝​​物包裹。

+0

非常感謝您快速回答wolle。我只是想知道爲什麼Wrapper類不需要在這種情況下被定義爲ref class?我實現了你的建議,並將IManagedProgression實現到C#端。我仍然很難將該接口封裝到Wrapper對象。我該怎麼做?我快到了。 – tonsten 2012-03-15 13:21:17

+0

可能管理方應該使用事件,而不是接口。但這也會起作用。 – 2012-03-15 20:16:19

+0

如何從C#端正確使用這個建議? – tonsten 2012-03-16 09:44:35

相關問題