Bug 48429 - Mono fails to marshal fixed buffer fields as unicode
Summary: Mono fails to marshal fixed buffer fields as unicode
Alias: None
Product: Runtime
Classification: Mono
Component: Interop (show other bugs)
Version: master
Hardware: PC Windows
: --- normal
Target Milestone: ---
Assignee: Zoltan Varga
Depends on:
Reported: 2016-11-30 16:14 UTC by Tautvydas Žilys
Modified: 2016-12-02 17:33 UTC (History)
3 users (show)

See Also:
Is this bug a regression?: ---
Last known good build:


Description Tautvydas Žilys 2016-11-30 16:14:58 UTC
C# code:

unsafe class Program
    static void Main(string[] args)
        Buffer b;
        FillBuffer(out b);
        Console.WriteLine(new string(b.characters));

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    struct Buffer
        public fixed char characters[32];

    static extern void FillBuffer(out Buffer buffer);

C++ code:

struct Buffer
    short characters[32];

extern "C" __declspec(dllexport) void FillBuffer(Buffer& buffer)
    char str[32] = "this is a real string";
    for (int i = 0; i < 32; i++)
        buffer.characters[i] = str[i];

Prints "t" on Mono, prints "this is a real string" on .NET.
Comment 1 Zoltan Varga 2016-12-01 19:53:22 UTC
Comment 2 Zoltan Varga 2016-12-02 17:33:22 UTC
Fixed in mono master eca5dbd482a9f5323a3744b7d2cb2387262b19a8.

Note You need to log in before you can comment on or make changes to this bug.