Also mir sind folgende Dinge aufgefallen:
Der PointerOperator in Delphi ist @ nicht &.
Du musst beachten, dass C++-Funktionen verlassen werden, wenn return aufgerufen wird.
Dein exit sollte auch ein break sein, damit die Schritte am Schluss der Routine noch abgearbeitet werden.
In dem C++-Variant kriegt man nach dem Aufruf:
h_result := p_instance.Get('SMBiosData', 0, &variant_bios_data, &types, 0);
Daten für ein Array, in Delphi wird das nicht so einfach gehen, falls doch wüsste ich gerne wie