Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# F#使用非托管dll函数_C#_.net_Dll_F#_Dllimport - Fatal编程技术网

C# F#使用非托管dll函数

C# F#使用非托管dll函数,c#,.net,dll,f#,dllimport,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.AnsiBS

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


否则怎么办呢?提前谢谢

无论是在MSDN上还是在规范中,似乎都没有关于
extern
函数声明语法的描述。但是,据我所知,它一字不差地反映了C声明,正如您从中看到的那样


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

在F#中更容易,因为
extern
声明基本上使用C语法。请看文章。谢谢,我看到了这个例子,但这是一个非常简单的例子。特别是,如何处理输入和输出变量的所有封送?你能告诉我上面的例子在F#中是什么样子吗?(同样,我还是.Net的新手)通常可以从直接从C复制函数声明开始。