我只需要澄清托管原型是什么。
我认为这是一个使用DLLImport属性的方法,并且有一个类似的方法:
[DllImport("user32.dll")]
private static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
它是否总是意味着你必须有一个DLLImport属性,然后是一个方法签名,它是一个私有的静态extern ???
干杯
答案 0 :(得分:3)
函数原型是一个函数,它只是作为编译器解决如何调用某些代码的方式声明的,而不必具有可用的“某些代码”,因此如果没有原型,它将会盲目地飞行与参数类型等有关。
因此对于P / Invoke功能,即。从C#这样的托管语言调用本机DLL中的函数,是的,您需要这些原型,除非您可以在.NET中找到包含该函数,DLL或在纯托管代码中实现类似功能的现有类。
是的,你需要一个[DllImport...]
属性来指定具有该功能的whith DLL,它应该是静态的和extern的,但它不一定必须是私有的,尽管它通常是,通常是因为你然后将该函数包装在托管类中,以便其他代码更容易使用它。