gpt4 book ai didi

.net - 运行 Excel DNA FSharp 注册示例时出现 DnaMarshalException

转载 作者:行者123 更新时间:2023-12-04 03:20:28 34 4
gpt4 key购买 nike

我正在尝试关注 the sample project为 F Sharp 使用 Excel-DNA 注册助手。特别是,我对使用可选参数的示例很感兴趣。

我已经构建了示例项目(使用 Visual Studio 2015),但是当我将生成的 Xll 加载到 Excel 2010 中时,我收到错误

Registration [Error] Method not registered due to unsupported signature: 'Func`4.Invoke' : DnaMarshalException - Unknown Data Type: Microsoft.FSharp.Core.FSharpOption`1[System.Double]

在诊断窗口中,函数 dnaFSharpOptional 在 Excel 中不可用。就好像参数转换 FsParameterConversions.FsOptionalParameterConversion 没有被应用或没有按预期工作。

关于错误来源的任何想法,以及如何解决它?

注意

  1. 因为我只是构建示例项目,而不是整个 Excel-DNA 注册解决方案,所以我不得不更改一些项目引用(即 ExcelDna.Registration、ExcelDna.Registration.FSharp)以指向预构建来自 nuget 的程序集。但我不认为这会有所作为。
  2. 示例项目在项目调试设置中引用了 Excel 2013,但我使用的是 Excel 2010。
  3. 项目中的其他示例函数(即 Async 函数)可用,因此通常不是注册失败的情况 - 这是可选参数特定的问题。

最佳答案

看起来问题是过滤器应用于参数转换 FsParameterConversions.FsOptionalParameterConversion,它只匹配 obj 类型的参数(即 System.对象).

我的修复/解决方法是修改 FsAsync.Addin.AutoOpen 方法以调用 ParameterConversionConfiguration.AddParameterConversion 的不同重载,传递 null到第二个论点。这会强制转换匹配所有参数,无论类型如何。

奇怪的是,我还必须在调用此重载时将参数转换对象显式转换为委托(delegate)类型才能使其编译(不确定原因)。

将 ExampleAddIn.fs 的第 10-11 行更改为:

let paramConvertConfig = ParameterConversionConfiguration()
.AddParameterConversion(FsParameterConversions.FsOptionalParameterConversion)

到:

let paramConvertConfig = ParameterConversionConfiguration()
.AddParameterConversion(
new Func<Type, ExcelParameterRegistration, LambdaExpression>(
FsParameterConversions.FsOptionalParameterConversion),
null) // null forces the parameter conversion to be tried against all params

关于.net - 运行 Excel DNA FSharp 注册示例时出现 DnaMarshalException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696627/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com