C++에서 정의한 아래 구조체를
struct example {
    int a;
    bool b;
    bool c;
    int d;
    int e;
}:


(Windows 환경에서)C#에서 아래와 같이 마셜링 하면 버그가 발생한다

[StructLayout(LayoutKind.Sequential)]
struct ExampleCS
{
    public int a;
    public bool b;
    public bool c;
    public int d;
    public int e;
}



버그는 C++에서 넘긴 것과 C#에서 받은 값이 서로 다르다.
이유는 C#에서는 bool이 1byte 이지만, C++로 마셜링하면 BOOL(4byte)로 인식하기 때문이다.

(Windows SDK에서 bool 이라는 타입은 없고 대신 BOOL을 사용하고 있다)


그래서 아래와 같이 바꾸어야 한다.


[StructLayout(LayoutKind.Sequential)]
struct ExampleCS
{
    public int a;
    [MarshalAs(UnmanagedType.I1)]
    public bool b;
    [MarshalAs(UnmanagedType.I1)]
    public bool c;
    public int d;
    public int e;
}




참고: http://qiita.com/_pochi/items/9dc460ee62f7da2d216c

저작자 표시
신고
by 흥배 2015.11.02 08:00
| 1 |