У меня есть DLL, которая имеет функцию только один экспорт:C# потребляет C++ 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# клиента?
Благодарим за помощь. Если я правильно понял, мне нужно будет написать еще одну C++/CLI DLL, чтобы выступать в качестве посредника между моей родной C++ DLL и моим клиентом C#. Вы знаете пример такого решения для агрегации C++/CLI? И вы правы, я планировал использовать класс, используя P/Invoke. – markiemooster
@markiemooster - вам не понадобится P/Invoke, если вы идете с C++/CLI. Вам просто нужно создать проект C++/CLI в Visual Studio и изучить основы языка (например, [здесь] [1]) (Также вы получили ответ Нангидрина, который обращается к пути P/Invoke, но это крайне необычно и неудобно использовать P/Invoke с помощью методов класса.) –
@markiemooster - я забыл вставить ссылку: [http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C- CLI-in-less-than-10-minutes] –