我是 C++/CLI 的新手,我想知道如何使用虚拟方法包装非托管 C++ 类,以便从 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++/CLI 设置从 C# 到非托管 C++ 的回调接口(interface),并通过 C++/CLI 将进度信息从非托管 C++ 返回到 C#。
既然我对此有点困惑,有人可以提供如何实现的建议吗?
最佳答案
你可以这样做:
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 并将其包装在 Wrapper 对象中。
关于C++/命令行界面 : How wrap unmanaged class with virtual methods to managed and use that from C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9715913/