我有一个具有附加功能的C#apllication。实现特定接口的附加/插件可以在运行时链接/加载到主C#应用程序。
现在我的问题是:我如何开发一个实现C#接口的非托管cpp dll并将运行时加载到C#app?
谢谢, Cabbi
答案 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。