2

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

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

谢谢, 出租车司机

4

3 回答 3

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);
    }
}
于 2013-06-05T14:07:34.657 回答
0

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

您可以通过.Net 中的 PInvoke 加载非托管 dll,但我不推荐这种方式。

于 2013-06-05T14:03:29.503 回答
0

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

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

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

于 2013-06-05T14:04:38.553 回答