什么是托管原型?

时间:2010-04-09 10:49:22

标签: c# .net

我只需要澄清托管原型是什么。

我认为这是一个使用DLLImport属性的方法,并且有一个类似的方法:

[DllImport("user32.dll")]
        private static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

它是否总是意味着你必须有一个DLLImport属性,然后是一个方法签名,它是一个私有的静态extern ???

干杯

1 个答案:

答案 0 :(得分:3)

函数原型是一个函数,它只是作为编译器解决如何调用某些代码的方式声明的,而不必具有可用的“某些代码”,因此如果没有原型,它将会盲目地飞行与参数类型等有关。

因此对于P / Invoke功能,即。从C#这样的托管语言调用本机DLL中的函数,是的,您需要这些原型,除非您可以在.NET中找到包含该函数,DLL或在纯托管代码中实现类似功能的现有类。

是的,你需要一个[DllImport...]属性来指定具有该功能的whith DLL,它应该是静态的和extern的,但它不一定必须是私有的,尽管它通常是,通常是因为你然后将该函数包装在托管类中,以便其他代码更容易使用它。