예제 #1
0
        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)");
            }
        }
예제 #2
0
 static extern void rabbitcall_init(ReleaseCallbackCallback releaseCallbackCallback, _rc_PtrAndSize *versionStringPtr, _rc_PtrAndSize *exceptionPtr);