У меня есть приложение на C # с возможностью добавления дополнений. Надстройка / плагин, который реализует определенный интерфейс, может быть связана / загружена во время выполнения с основным приложением C #.
Теперь на мой вопрос: как я могу разработать неуправляемый cpp dll, который реализует интерфейс C # и быть загруженным во время выполнения в приложение C #?
Спасибо,
Cabbi
Вы можете реализовать интерфейс, используя 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 сборки.