将 .NET 程序集集成到 F# 应用程序中
F# 编程语言提供了实现通常使用 C# 实现的相同解决方案的机会,但代码更少。在跨企业范围的安装扩展部署解决方案时,或者在任何重视代码效率的情况下,这都会很有帮助。F# 程序的简洁性也使其更易于维护。
下面的示例展示如何将可部署的 MATLAB®magic 函数集成到 F# 应用程序中。
前提条件
您必须运行 Microsoft® Visual Studio® 2010 或更高版本才能使用此示例。
如果在运行 64 位 Microsoft Visual Studio 系统上构建此示例,则必须添加对 32 位 MWArray DLL 的引用,因为当前模仿的是 Microsoft 的 F# 编译器。
步骤 1:构建组件
使用以下说明构建 MagicSquareComp 组件生成 .NET 程序集并编译 .NET 应用程序。
步骤 2:将组件集成到 F# 应用程序中
使用 Microsoft Visual Studio 2010 或更高版本创建一个 F#工程。
在 Visual Studio 中添加对您的 .NET 组件和
MWArray的引用。使 .NET 命名空间可用于您的组件和
MWArray库:open MagicSquareComp open MathWorks.MATLAB.NET.Arrays
使用初始
let语句定义 Magic Square 函数,如下所示:然后添加以下语句完成函数定义。let magic n =
实例化幻方组件:
use magicComp = new MagicSquareComp.MagicSquareClass()
定义输入参量:
use inarg = new MWNumericArray((int) n)
调用 MATLAB,获取输出参量元胞数组,并提取第一个元素作为二维浮点数数组:
(magicComp.makesquare(1, inarg).[0].ToArray() :?> float[,])
完整的函数定义如下所示:
let magic n = // Instantiate the magic square component use magicComp = new MagicSquareComp.MagicSquareClass() // Define the input argument use inarg = new MWNumericArray((int) n) // Call MATLAB, get the output argument cell array, // extract the first element as a 2D float array (magicComp.makesquare(1, inarg).[0].ToArray() :?> float[,])再添加一条 let 语句来定义输出显示逻辑:
let printMagic n = let numArray = magic n // Display the output printfn "Number of [rows,cols]: [%d,%d]" (numArray.GetLength(0)) (numArray.GetLength(1)) printfn "" for i in 0 .. numArray.GetLength(0)-1 do for j in 0 .. numArray.GetLength(1)-1 do printf "%3.0f " numArray.[i,j] printfn "" printfn "=========================\n" ignore(List.iter printMagic [1..19]) // Pause until keypress ignore(System.Console.ReadKey())
完整程序清单如下:
步骤 3:部署组件
有关将组件部署给最终用户的信息,请参阅MATLAB Runtime。
