Может ли C ++ / CLI вернуть абстрактный класс из C ++ в C #? - PullRequest
1 голос
/ 06 марта 2012

Я читал это http://msdn.microsoft.com/en-us/magazine/cc163681.aspx и нашел часть об определении абстрактных базовых классов очень интересной.

Возможно ли, чтобы класс C ++ / CLI, обертывающий класс C ++, возвращал указатель на чисто виртуальный базовый класс (из функции в 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 #, конечно, но это не будет проблемой. Это вообще возможно?

Спасибо.

EDIT - вероятно, следует добавить, что аргументы, передаваемые как указатели, являются буферами, которые заполняются данными внутри функций.

1 Ответ

1 голос
/ 06 марта 2012

C # не может напрямую вызывать виртуальные методы из нативных классов.Вам нужно написать управляемый класс C ++ / CLI, который отражает функциональность нативного класса и содержит указатель на него.Затем он делегирует каждый вызов одному из своих методов соответствующему неуправляемому методу.

...