2
我有一個用F#編寫的項目,我必須爲它的一部分使用非託管dll。我對.Net編程非常陌生,所以這是另一個層面的複雜性。F#使用非託管dll函數
在他們提供如何爲使用來自C#的功能,像這樣的樣本非託管的DLL的文件:
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#調用非託管函數,不是一個好主意嗎?
怎麼還會這樣呢?提前致謝!
因爲'extern'聲明基本上使用C語法,所以它在F#中更加簡單。請參閱文章[MSDN上的外部函數](http://msdn.microsoft.com/zh-cn/library/dd393785.aspx)。 – Daniel
謝謝,我看到了這個例子,但它非常簡單。特別是,我將如何照顧輸入和輸出變量的所有編組?你能告訴我如何在F#中看到上面的例子嗎? (同樣,我仍然是.Net中的新手) – siki
您通常可以直接從C中複製函數聲明開始。[以下是更多示例](http://fsharpnews.blogspot.com/2007/04/外國功能接口ffi.html)。 – Daniel