2012-03-02 3 views
0

У меня есть C++ DLL, которая возвращает указатель на абстрактную структуру, которая скрывает интерфейс базового класса. DLL экспортирует только одну функцию getInstance, которая создает объект структуры C++, которая наследуется от этой абстрактной структуры и возвращает ее как указатель на абстрактный тип структуры.возвращение абстрактных C++ struct в C#

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

Спасибо.

+0

Структура C++ похожа на C++-класс, нет никакой реальной разницы (по крайней мере, где C++/C# interop касается ...). Что вы хотите сделать со структурой? Вызовите его методы? – zmbq

+0

Да, я хочу вызвать его методы, GetInstance просто возвращает указатель на этот тип структуры, поэтому мне нужно объявить структуру с тем же определением, что и абстрактная структура C++, возвращаемая GetInstance –

+0

См. Ответ @ jalf. – zmbq

ответ

3

В C++ структуры и классы одинаковы. Единственное различие заключается в том, что они по умолчанию используют разные параметры доступа (структура использует общедоступные по умолчанию, по умолчанию - по умолчанию).

Таким образом, ваша абстрактная структура C++ становится C# класс, а не struct.

+0

Вы не можете иметь указатель на класс в C#, хотя верно? –

+0

Ну, у C# обычно нет указателей, если вы не вникаете в небезопасный код. Но я не совсем понимаю, что вы пытаетесь сделать. Почему вам (кажется, вам) нужен указатель на C# вообще? – jalf

+0

, потому что это то, что возвращает C++ DLL, я не могу вернуть экземпляр абстрактного класса или структуры в C++, это должен быть указатель. –

Смежные вопросы