Реализация интерфейса 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.