класс в управляемом c ++ вызывается из c # - PullRequest
3 голосов
/ 11 июля 2011

У меня есть деклассированный внутри управляемого c ++ dll класс как

public class IPHelper
{
public:
    static void CheckIP(LPWSTR pSocketName);
    static void DebugMessage(const wchar_t *str, ...);
private:        
    static DWORD GetIPInformation(PSOCKET_RECORD &pInfo);
};

Я успешно скомпилировал его и добавил как ссылку на мой проект на c #. Я могу использовать пространство имен, однако класс кажется пустым, и я не могу вызвать функции внутри него.

Есть идеи?

Ответы [ 4 ]

3 голосов
/ 11 июля 2011

Этот класс не управляется, он является родным. Вам нужно назвать его public ref class, если вы хотите использовать его из управляемого кода.

1 голос
/ 11 июля 2011

Этот класс кажется гибридом. Вы указали публичный класс IPHelper, который на полпути к тому, что вы хотите. Вы должны указать это как общедоступный ref класс IPHelper. Однако даже в этом случае он все равно не будет хорошо взаимодействовать с управляемыми классами из-за типов параметров, которые он получает. Например, wchar_t отличается от System :: String ^ (управляемый C ++ способ объявления строк). Аналогично, LPWSTR также не совпадает с System :: String ^. В качестве примечания, вам лучше написать несколько служебных методов для преобразования между .NET System :: Strings и wchar_t и другими собственными строками, которые вам, скорее всего, понадобятся. Эта - отличная статья на MSDN о том, как конвертировать все типы строк.

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

1 голос
/ 11 июля 2011

Как уже отмечали другие, это родной класс C ++.Предполагая, что ваш проект поддерживает CLR, вы можете легко написать простую оболочку C ++ / CLI, которая позволит вам использовать его в управляемом контексте.C ++ / CLI, который должен помочь вам начать работу в правильном направлении.

1 голос
/ 11 июля 2011

Вам нужно будет вызвать его, используя метод P / Invoke.См. этот справочник для получения дополнительной информации.

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