F#消耗非托管DLL函数

时间:2014-01-23 17:18:55

标签: c# .net dll f# dllimport

我有一个用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#调用非托管函数,这不是一个好主意吗?

怎么会这样呢?提前谢谢!

1 个答案:

答案 0 :(得分:0)

在MSDN或规范中似乎没有extern函数声明的语法描述。但是,据我所知,它可以逐字地反映C声明,正如您可以从these (rather old) examples看到的那样。

我在External Functions的MSDN页面上留下了反馈,建议它包含语法的解释和示例。