Paw*_*uch 9 .net f# marshalling
我最近一直在玩 F#中的编组,令我惊讶的是我最终得到了错误FS0980:不能在F#代码中指定自定义编组.考虑使用C#辅助函数.
我设法找到的有关该主题的信息仅为F#4.0 Spec(第300页)
应用于参数或返回类型时,指定CLI P/Invoke存根声明的编组属性.此属性可以在F#和导入的程序集中使用.但是,F#不支持"自定义"marshallers的规范.
我最感兴趣的是缺乏定制marshallers支持的原因,因为我可以"忍受"将C#程序集引入项目.
谁能澄清一下这个?
编辑:
请求的示例代码
[<StructLayout(LayoutKind.Sequential, Pack=1)>]
type BASIC_STRUCT =
struct
[<MarshalAsAttribute(UnmanagedType.CustomMarshaler,MarshalTypeRef=typedefof<DateTimeMarshaller>)>]
val timeVar:DWORD
end
Run Code Online (Sandbox Code Playgroud)
从我注意到只是设置UnmanagedType.CustomMarshaler足以导致编译时异常
看看编译器代码,F# 团队似乎还没有真正下定决心:
| 0x2C ->
error(Error(FSComp.SR.ilCustomMarshallersCannotBeUsedInFSharp(),m))
(* ILNativeType.Custom of bytes * string * string * bytes (* GUID,nativeTypeName,custMarshallerName,cookieString *) *)
//ILNativeType.Error
Run Code Online (Sandbox Code Playgroud)
github 上没有关于这段代码的历史记录。我的直觉是,解释将类似于“具有廉价解决方法的不常见用例”。很可能从一开始就是这样,因为 F# 2.0 规范也有您引用的行。
尝试在 github 上提出一个有关它的问题。也许有人可以在微软系统中挖掘出一些东西。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |