Немного сложно определить, с чего начать, но объяснение @ DavidHeffernan о форвардном объявлении типа указателя должно дать вам начало.
Я бы перевел это на следующее ( непроверено ) код:
type
_my_ManagedPtr_p = ^my_ManagedPtr_t;
my_ManagedPtr_ManagerFunction_t = function(
managedPtr: my_ManagedPtr_p;
scrPtr: my_ManagedPtr_p;
operation: Integer): Integer cdecl;
my_ManagedPtr_t_data = record
case Boolean of
False: (intValue: Integer);
True: (ptr: Pointer);
end;
my_ManagedPtr_t = record
ptr: Pointer;
userData: array[0..3] of my_ManagedPr_t_data;
manager: my_ManagedPtr_ManagerFunction_t;
end;
my_CorrelationId_t = record
typeData: UInt32; // size, valueType, classId and reserved combined in one integer.
case Byte of
0: (intValue: my_UInt64_t);
1: (ptrValue: my_ManagedPtr_t;
end;
Я не собираюсь делать битовые поля, но, пожалуйста, прочитайте раздел Битовые поля моей статьи Подводные камни преобразования снова (я вижуВы уже упоминали это), чтобы найти несколько решений.Если вы хотите сделать это действительно хорошо, используйте методы и индексированный доступ, в противном случае просто используйте сдвиги и маски для доступа к битовым полям, содержащимся в элементе, который я назвал typeData
.Как это можно сделать, объясняется в статье, и здесь слишком много повторений.
Если у вас все равно есть проблемы, задайте новый вопрос.