我在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#。 如何在方法参数中定义属性?
答案 0 :(得分:2)
这是因为你的extern函数期望参数的类型:
extern bool OpenPrinter([<MarshalAs(UnmanagedType.LPStr)>] string szPrinter)