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

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

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

Спасибо,
Cabbi

2

Решение

Вы можете реализовать интерфейс, используя 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);
}
}
1

Другие решения

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

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

0

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

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

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

0
По вопросам рекламы [email protected]