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

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


Attachments

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];
    };

    [DllImport("TestDll.dll")]
    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
https://github.com/mono/mono/pull/4072
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.