2016-03-20 23 views
9

Tôi đã được chơi đùa với marshalling trong F # gần đây, và ngạc nhiên của tôi tôi đã kết thúc với lỗi FS0980: Custom marshallers không thể được chỉ định trong mã F #. Hãy xem xét sử dụng một hàm trợ giúp C#.sử dụng tùy chỉnh Marshaller trong F #

Chỉ những thông tin liên quan đến chủ đề này, mà tôi cố gắng tìm kiếm, là F # 4.0 Spec (trang 300)

Khi áp dụng cho một tham số hoặc kiểu trả về, quy định các thuộc tính marshalling cho một CLI P/Khai báo khai sinh. Thuộc tính này có thể được sử dụng trong cả F # và hội đồng nhập khẩu. Tuy nhiên, F # không hỗ trợ đặc điểm kỹ thuật của "tùy chỉnh" marshallers.

Tôi chủ yếu quan tâm đến những lý do đằng sau việc thiếu hỗ trợ tùy chỉnh, như tôi có thể "sống chung" giới thiệu lắp ráp C# để dự án.

Có ai có thể làm rõ điều này không?

EDIT:

Mẫu mã theo yêu cầu

[<StructLayout(LayoutKind.Sequential, Pack=1)>] 
type BASIC_STRUCT = 
    struct 
    [<MarshalAsAttribute(UnmanagedType.CustomMarshaler,MarshalTypeRef=typedefof<DateTimeMarshaller>)>] 
    val timeVar:DWORD 
    end 

từ những gì tôi nhận thấy chỉ thiết UnmanagedType.CustomMarshaler là đủ để gây ra thời gian biên dịch ngoại lệ

+0

Bạn có thể cung cấp mã tạo lỗi hay không. Tôi biết bạn không tìm cách giải quyết, nhưng những người khác sẽ quan tâm đến những gì gây ra lỗi. –

Trả lời

2

Nhìn vào compiler code, có vẻ như nhóm F # thực sự không thể quyết định được điều này:

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

Không có lịch sử nào xung quanh đoạn mã đó trên github. Cảm giác ruột của tôi là lời giải thích sẽ là một thứ gì đó dọc theo dòng "trường hợp sử dụng không phổ biến với cách giải quyết rẻ tiền". Rất có thể nó đã được như vậy từ đầu, kể từ F # 2.0 spec cũng có dòng bạn trích dẫn.

Thử nêu vấn đề về github về nó. Có lẽ ai đó ở đó có thể đào một thứ gì đó trong hệ thống của Microsoft.

+0

tôi đã làm một số đào trong nguồn này, thậm chí quản lý để làm cho nó hoạt động. Điều thú vị, mã thực tế cho phát xạ il là hiện tại, những gì bạn đăng là chỉ thiếu câu đố. Để chắc chắn tôi sẽ đi đến github với điều đó. –

Các vấn đề liên quan