【发布时间】: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++ 类对象的指针。当然支持声明抽象托管类并将引用返回给它们。