public static void init() { if (isInitialized) { throw new Exception("Already initialized"); } isInitialized = true; _rc_PtrAndSize _rc_e; releaseCallbackCallback = _rc_Ciu.releaseCallback; _rc_PtrAndSize cppVersionStringPtr; rabbitcall_init(releaseCallbackCallback, &cppVersionStringPtr, &_rc_e); if (_rc_e.ptr != null) { throw new Exception(_rc_Ciu.readStringUtf8AndFree(_rc_e)); } string cppVersionString = readStringUtf8AndFree(cppVersionStringPtr); StringBuilder csVersionStringBuilder = new StringBuilder(); initPartition_main(csVersionStringBuilder); csVersionStringBuilder.Append(","); initPartition_partition1(csVersionStringBuilder); csVersionStringBuilder.Append(","); initPartition_partition2(csVersionStringBuilder); string csVersionString = csVersionStringBuilder.ToString(); if (cppVersionString != csVersionString) { throw new Exception($"Some C++ and C# files were generated with different versions of the tool:\nC++: {cppVersionString}\nC#: {csVersionString}"); } if (sizeof(void *) != 8) { throw new Exception($"Different configured pointer size (8 bytes) than actual size ({sizeof(void *)} bytes)"); } }
static extern void rabbitcall_init(ReleaseCallbackCallback releaseCallbackCallback, _rc_PtrAndSize *versionStringPtr, _rc_PtrAndSize *exceptionPtr);