Piotr
Głudkowski
Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...
Temat: Pola bitowe z C/C++ a PInvoke
Witam,robię klasę w C#, będącą wrapperem nad API AutoMapy (API jako dll w C++).
W pliku nagłówkowym z API mam strukturę, wykorzystującą pola bitowe, za pomocą której mam przekazać jeden z argumentów do jednej z wołanych funkcji API.
Po stronie C# muszę więc zrobić klasę, która będzie "odwzorowaniem" tej struktury.
I tu mam problem: wydaje mi się, że robię dobrze, a działa źle.
Zerknijcie na to poniżej, proszę, może rzeczywiście coś spieprzyłem?
Przykładowo, w nagłówku w C++ jest tak:
struct MYSTRUCT
{
DWORD field1 : 8;
DWORD field2 : 24;
int field3;
};
W C# zrobiłem tak:
[StructLayout(LayoutKind.Sequential)]
public class MyClass
{
private UInt32 _combo;
public Int32 Field3;
public UInt32 Field1
{
get { return _combo & 0xff; }
set { _combo = (_combo & 0xffffff00) | (value & 0xff); }
}
public UInt32 Field2
{
get { return (_combo >> 8) & 0x00ffffff; }
set { (_combo & 0xff) | ((value & 0x00ffffff) << 8); }
}
}
No i mam kłopot z wartością Field1 - wygląda na to, że funkcja w API widzi inną wartość, niż to, co wpisuję tam w C#.
Any ideas, please?
Acha, zapomniałem, a to może być istotne: platforma x86.Piotr Głudkowski edytował(a) ten post dnia 02.11.10 o godzinie 13:10