Реализация интерфейса C# в неуправляемой cpp dll

У меня есть приложение на C# с возможностью добавления дополнений. Надстройка / плагин, который реализует определенный интерфейс, может быть связана / загружена во время выполнения с основным приложением C#.

Теперь на мой вопрос: как я могу разработать неуправляемый cpp dll, который реализует интерфейс C# и быть загруженным во время выполнения в приложение C#?

Спасибо, Кабби

3 ответа

Решение

Вы можете реализовать интерфейс, используя p/inkove, например:

public interface IDirectory
{
    bool IsDirectoryEmplty(string path);
}

public class Directory : IDirectory
{
    [DllImport("Shlwapi.dll", EntryPoint = "PathIsDirectoryEmpty")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool IsDirectoryEmplty([MarshalAs(UnmanagedType.LPStr)]string directory);

    bool IInterface.IsDirectoryEmplty(string path)
    {
        return IsDirectoryEmplty(path);
    }
}

С common language support на, вы можете написать управляемый DLL с полной встроенной возможностью C++.

И вы можете загрузить неуправляемую dll через PInvoke в.Net, но я бы не рекомендовал этот способ.

Строго говоря, вы не можете иметь неуправляемую DLL, которая реализует интерфейс C# (управляемый).

Однако вы можете создать сборку в смешанном режиме, это может быть тем, что вам нужно. Это очень распространенный способ предоставления нативной реализации C++ (неуправляемой) с помощью оболочки.NET, делающей ее сборкой, которая выглядит управляемой для потребителя C# (или другого языка.NET).

Кроме того, вы можете использовать PInvoke для использования чистой нативной библиотеки DLL из сборки NET.

Другие вопросы по тегам