У меня есть структура C ++, и я должен взаимодействовать с ней из моего кода C #.
Я компилирую свой код C # как независимую от платформы dll, что означает, что я могу использовать одну и ту же C # dll на разных платформах ( 32-битная или 64-битная - не имеет значения ), тогда как я распространяю C ++ по-разному для разных платформ.
Проблема в том, что структура C ++, которую я должен взаимодействовать, похоже, работает для другого определения C #. В 64-битной ОС работает следующая структура:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MayDay_CONTEXT
{
public System.UInt32 dwIndex; //previously was int
public System.UInt32 dwVersion; //previously was int
public System.UInt64 hLock; //previously was int
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
public byte[] reserve;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 56)]
public byte[] bAtr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] bID;
public uint dwAtrLen;
}
, но в 32-битной ОС работает следующая структура:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MayDay_CONTEXT
{
public int dwIndex; //previously was int
public int dwVersion; //previously was int
public int hLock; //previously was int
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
public byte[] reserve;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 56)]
public byte[] bAtr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] bID;
public uint dwAtrLen;
}
Есть ли способ установить тип элемента структуры во время выполнения? Я знаю, что для этого нужна какая-то утка, но, может быть, есть лучшее решение ... есть идеи?