[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.U1)]
public delegate bool MyCallback();
// ...
private static MyCallback _MyCallback = __MyCallback;
// ...
[ObjCRuntime.MonoPInvokeCallback(typeof(MyCallback))]
private static bool __MyCallback()
{
return false;
}
< /code>
На собственной стороне: < /p>
typedef signed char BOOL;
typedef BOOL (*fnMyCallback)();
//
printf("sizeof(BOOL)=%zu\n", sizeof(BOOL));
if (!context->myCallback()
{
printf("direct check is FALSE\n");
}
else
{
printf(TAG, "direct check is TRUE\n");
}
< /code>
Вывод < /p>
sizeof (bool) = 1
Прямая проверка - это истина < /p>
< /blockquote>
Итак, мы подтверждаем, что значение, с которым мы имеем дело, является 1 байт на обоих управляемых, так и некоммерческих SIDES. Почему это неправильно оценивается как истина
Использование .NET 9, нацеливаясь на iOS, у меня есть что -то вроде этого: < /p> [code] [UnmanagedFunctionPointer(CallingConvention.Cdecl)] [return: MarshalAs(UnmanagedType.U1)] public delegate bool MyCallback();
[ObjCRuntime.MonoPInvokeCallback(typeof(MyCallback))] private static bool __MyCallback() { return false; } < /code> На собственной стороне: < /p> typedef signed char BOOL; typedef BOOL (*fnMyCallback)();
//
printf("sizeof(BOOL)=%zu\n", sizeof(BOOL));
if (!context->myCallback() { printf("direct check is FALSE\n"); } else { printf(TAG, "direct check is TRUE\n"); }
< /code> Вывод < /p>
sizeof (bool) = 1 Прямая проверка - это истина < /p> < /blockquote> Итак, мы подтверждаем, что значение, с которым мы имеем дело, является 1 байт на обоих управляемых, так и некоммерческих SIDES. Почему это неправильно оценивается как истина [/code]?>