在非托管c ++ dll中实现C#接口

时间:2013-06-05 13:59:57

标签: c# c++ plugins interface add-on

我有一个具有附加功能的C#apllication。实现特定接口的附加/插件可以在运行时链接/加载到主C#应用程序。

现在我的问题是:我如何开发一个实现C#接口的非托管cpp dll并将运行时加载到C#app?

谢谢, Cabbi

3 个答案:

答案 0 :(得分:1)

您可以使用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 :(得分:0)

启用common language support后,您可以编写带有完全本机c ++功能的托管dll。

你可以通过.Net中的PInvoke加载非托管dll,但我不建议这样做。

答案 2 :(得分:0)

严格地说,您不能拥有实现C#(托管)接口的非托管 DLL。

但是,您可以创建mixed mode assembly,这可能是您想要的。这是一种非常常见的方法,可以使用.NET包装器提供本机C ++(非托管)实现,使其成为一个看起来可以管理到C#(或其他.NET语言)使用者的程序集。

此外,您可以使用PInvoke从.NET程序集中使用纯本机DLL。