C ++ / CLI: Как обернуть неуправляемый класс виртуальными методами в управление и использовать его из C #? - PullRequest
1 голос
/ 15 марта 2012

Я новичок в 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 # для неуправляемого C ++ через C ++ / CLI и получить информацию о прогрессии обратно в C # из неуправляемого C ++ через C ++ / CLI.

Может кто-нибудь дать совет, как это реализовать, так как я как-то запутался с этим?

1 Ответ

2 голосов
/ 15 марта 2012

Вы можете сделать что-то вроде:

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;
};

Затем вы можете реализовать IManagedProgression на C # или другом языке и обернуть его в объект Wrapper.

...