2012-03-06 82 views
1

我一直在阅读这个http://msdn.microsoft.com/en-us/magazine/cc163681.aspx,并发现有关定义抽象基类非常有趣的部分。C++/CLI能否将C++的抽象类返回给C#?

包装C++类的C++/CLI类是否有可能返回一个指向纯虚拟基类(从C++中的函数)到C#的指针?我有一个相当复杂的解决方案,但能够直接返回指向抽象类的指针会简化很多事情。我想返回一个指针的接口被structred像这样(在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#重载函数,但是这不会是一个问题。这甚至有可能吗?

谢谢。

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

+1

我不确定你想要做什么。你想使用C#中的本地C++对象吗?或者你只需​​要将指针值作为整数并传递给它?你可以编写你想要实现的伪代码(从C#的角度来看)。 – 2012-03-06 12:26:49

+0

为什么要将指向纯虚拟基类的指针传递给C#?用C++/Cli包装并不意味着像这样工作。这篇文章只是说“C#抽象类的C++/Cli对象是'ref class XXX abstract ...'” – 2012-03-06 12:50:54

+1

C#代码没有用于指向抽象C++类对象的指针。声明抽象托管类并返回*引用*是肯定支持的。 – 2012-03-06 13:39:03

回答

1

C#不能直接从本地类调用虚拟方法。你需要做的是编写一个托管的C++/CLI类,它反映了本地类的功能并保存了一个指向它的指针。然后,它将每个调用的一个方法委托给相应的非托管方法。