Pointer(recObj.consock) - Böse Sache. Damit verwandelst du recObj.consock in einen Pointer und kopierst den Wert, der an der Stelle mit dem Index von recObj.consock steht, wiederum einem Pointer zu. Wirklich äußerst unschöne Sache, denn recObj.consock ist wahrscheinlich ein
Handle, d.h. sobald du versuchen willst, auf den Speicher an dieser Stelle zuzugreifen, stellst du eine üble Sauerei im Speicher an, die natürlich als Zugriffsverletzung abgefangen wird.
So ist es richtig:
Delphi-Quellcode:
procedure bla(recObj: Prec);
var p: pointer;
begin
GetMem(p, sizeof(TSocket));
CopyMemory(p, @recObj.consock, sizeof(TSocket));
end;