public static IntPtr NewIRhinoOptionsPagePointer(StackedDialogPage page, uint rhinoDocRuntimeSn) { SetRhinoOptionsPageHooks(); var id = Guid.Empty; // Appending the EnglishPageTitle to the end of the class name allows // a plug-in page class to get used more than once in the same options host, // this is the case in the Commands plug-in, there is a generic host that // creates specific panels for each page. var pointer = UnsafeNativeMethods.IRhinoOptionsPage_New(rhinoDocRuntimeSn, $"{page.GetType().FullName}.{page.EnglishPageTitle}", ref id); if (pointer != IntPtr.Zero) { g_irhino_page_dictionary.Add(id, new RhinoPageInsnce(page, pointer, null, rhinoDocRuntimeSn)); } return(pointer); }