我有一个用F#编写的项目,我必须使用非托管DLL作为其中的一部分。我对.Net编程非常陌生,所以这是另外一个复杂程度。
在非托管DLL的文档中,他们提供了如何使用C#中的函数的示例,如下所示:
using System;
using System.Runtime.InteropServices;
[DllImport("foo.dll")] public static extern Int32 foo_init(
[MarshalAs(UnmanagedType.AnsiBStr), In()] ref string FOOarg_Handle,
[MarshalAs(UnmanagedType.AnsiBStr), In()] ref string FOOarg_User,
[MarshalAs(UnmanagedType.AnsiBStr), Out()] out string FOOarg_DataOut,
[MarshalAs(UnmanagedType.AnsiBStr), Out()] out string FOOarg_ErrOut);
这本身就很丑陋,但我不知道如何从F#中做到这一点。创建一个C#类,将所有包含外部DLL函数的函数定义放在那里,并从F#中调用它们,而不是直接从F#调用非托管函数,这不是一个好主意吗?
怎么会这样呢?提前谢谢!
答案 0 :(得分:0)
在MSDN或规范中似乎没有extern
函数声明的语法描述。但是,据我所知,它可以逐字地反映C声明,正如您可以从these (rather old) examples看到的那样。
我在External Functions的MSDN页面上留下了反馈,建议它包含语法的解释和示例。