gpt4 book ai didi

.net - 在F#中使用自定义Marshaller

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

我最近一直在玩F#中的编码,而令我惊讶的是,我遇到了错误FS0980:无法在F#代码中指定自定义编码。考虑使用C#辅助函数。

我设法找到的仅与该主题有关的信息是F#4.0规范(第300页)

When applied to a parameter or return type, specifies the marshalling attribute for a CLI P/Invoke stub declaration. This attribute may be used in both F# and imported assemblies. However, F# does not support the specification of "custom" marshallers.



我最感兴趣的是缺乏自定义编码支持的背后原因,因为我可以“忍受”将C#程序集引入项目。

有人可以澄清吗?

编辑:

根据要求提供示例代码
[<StructLayout(LayoutKind.Sequential, Pack=1)>]
type BASIC_STRUCT =
struct
[<MarshalAsAttribute(UnmanagedType.CustomMarshaler,MarshalTypeRef=typedefof<DateTimeMarshaller>)>]
val timeVar:DWORD
end

从我注意到的情况来看,仅设置 UnmanagedType.CustomMarshaler 就足以导致编译时异常

最佳答案

查看compiler code,似乎F#团队无法真正下定决心:

| 0x2C -> 
error(Error(FSComp.SR.ilCustomMarshallersCannotBeUsedInFSharp(),m))
(* ILNativeType.Custom of bytes * string * string * bytes (* GUID,nativeTypeName,custMarshallerName,cookieString *) *)
//ILNativeType.Error

github上的那段代码没有历史。我的直觉是,这种解释将类似于“具有廉价解决方法的不常见用例”。从一开始就很可能是这样,因为F#2.0规范也有您引用的行。

尝试在github上提出一个有关它的问题。也许有人可以在Microsoft系统中进行挖掘。

关于.net - 在F#中使用自定义Marshaller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36119720/

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