【问题标题】:Can C++/CLI return abstract class from C++ to C#?C++/CLI 能否将抽象类从 C++ 返回到 C#?
【发布时间】:2012-03-06 11:42:44
【问题描述】:

我一直在阅读http://msdn.microsoft.com/en-us/magazine/cc163681.aspx,发现关于定义抽象基类的部分非常有趣。

是否可以让包装 C++ 类的 C++/CLI 类将指向纯虚拟基类(来自 C++ 中的函数)的指针返回给 C#?我正在制定一个相当复杂的解决方案,但是能够直接返回指向抽象类的指针会大大简化事情。我想要返回一个指针的接口是这样构造的(在 C++ 中)

class CCommsBase
{
virtual DWORD Init(char* info[], int amount, int id1, int id2) =0;
virtual DWORD GetJPVals(SJPV* jpv, DWORD timeoutMS=kiDONTOVERRIDE)=0;
virtual DWORD GetNums(int amount, int* out, DWORD timeoutMS=kiDONTOVERRIDE)=0;
virtual DWORD GetJPWinVal(SJP* jp, int id, DWORD stake, DWORD timeoutMS=kiDONTOVERRIDE)=0;
virtual DWORD Confirm(bool *bConfirmedWin, int id, DWORD timeoutMS=kiDONTOVERRIDE)=0;

virtual bool Connected()=0;
virtual LPWSTR GetErrorString(int errCode)=0;
};

C# 中的重载函数当然必须替换默认参数,但这不是问题。这甚至可能吗?

谢谢。

编辑 - 可能应该添加,作为指针传入的参数是在函数内部填充数据的缓冲区。

【问题讨论】:

  • 我不确定你想做什么。您想使用 C# 中的本机 C++ 对象吗?还是您只需要将指针值作为整数并将其传递?你能写出你想要实现的伪代码吗(从 C# 的角度来看)。
  • 为什么要将指向纯虚拟基类的指针传递给 C#?用 C++/Cli 包装并不意味着像这样工作。文章只是说“C# abstract class 的 C++/Cli 对应物是 ref class XXX abstract...
  • C# 代码没有使用指向抽象 C++ 类对象的指针。当然支持声明抽象托管类并将引用返回给它们。

标签: c++ interop c++-cli


【解决方案1】:

C# 不能直接从本地类调用虚方法。您需要做的是编写一个托管的 C++/CLI 类,该类镜像本机类的功能并持有指向它的指针。然后它将对其方法之一的每次调用委托给相应的非托管方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多