C # потребление C ++ DLL-функции, которая экспортирует абстрактный класс / интерфейс? - PullRequest
1 голос
/ 19 марта 2012

У меня есть DLL, которая имеет только одну функцию экспорта:

#ifdef __cplusplus
extern "C" 
{
   __declspec(dllexport) IRouter* CreateRouter(); 
}
#endif

Интерфейс для IRouter выглядит следующим образом:

class IRouter
{
public:
    virtual bool __stdcall DoSomething(LPCWSTR szCommand) = 0;
    // Call Release() from DLL client to free any memory associated with this object
    virtual bool __stdcall Release() = 0;
};

, и у меня есть конкретный класс, интерфейс которого имеет видследующие:

class CMyRouter : public IRouter
{
public:
    bool __stdcall DoSomething(LPCWSTR szCommand);
    bool __stdcall Release();
}

Как и следовало ожидать, реализация для класса MyRouter включена в DLL.

Код для моей единственной функции экспорта выглядит следующим образом:

#ifdef __cplusplus
extern "C" 
{
    __declspec(dllexport) IRouter* CreateRouter()
    {
        return new CMyRouter;
    }
}
#endif  // __cplusplus

Мой вопрос: как я могу получить доступ к своему производному объекту IRouter из клиента C #?

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Вы можете сделать это в C ++ / CLI (используя агрегацию, а не наследование). Например, создайте управляемый класс в C ++ / CLI, который соответствует и содержит указатель на абстрактный класс C ++ IRouter и предоставляет несколько методов пересылки, таких как `DoSomething(string). Затем вы можете реализовать оставшуюся управляемую логику в C #.

Также возможно, но не совсем в соответствии с вашей текущей формулировкой вопроса, использовать класс с помощью P / Invoke или COM.

0 голосов
/ 19 марта 2012

Взгляните на эту статью Наследование от собственного класса C ++ в C # , это может быть полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...