2012-03-15 53 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

相关问题