在F#中定义方法参数中的属性

时间:2014-08-01 10:43:56

标签: f#

我在F#中进行DLL导入,然后为方法传递一些参数。

 [<DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)>]
        extern bool OpenPrinter([<MarshalAs(UnmanagedType.LPStr)>] szPrinter)

A parameter with attributes must also receive a name是编译器的答案。

此方法必须在其前面具有MarshalAs属性,就像我们在C#

中一样
[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter);

OpenPrinter的参数是名为string的{​​{1}},但它有一个属性szPrinter

F#不接受这个像C#。 如何在方法参数中定义属性?

1 个答案:

答案 0 :(得分:2)

这是因为你的extern函数期望参数的类型:

extern bool OpenPrinter([<MarshalAs(UnmanagedType.LPStr)>] string szPrinter)