/// <summary> /// Generated 0D structure from an InChI string. /// </summary> /// <param name="input"></param> /// <returns></returns> public static NInchiOutputStructure GetStructureFromInchi(NInchiInputInchi input) { if (input == null) { throw new ArgumentNullException(nameof(input), "Null input"); } var native_input = new Inchi_InputINCHI(); var szInChI = Marshal.StringToHGlobalAnsi(input.Inchi); var szOptions = Marshal.StringToHGlobalAnsi(input.Options); try { native_input.szInChI = szInChI; native_input.szOptions = szOptions; var native_output = new Inchi_OutputStruct(); var ret = GetStructFromINCHI(ref native_input, out native_output); NInchiOutputStructure output = new NInchiOutputStructure(ret, Marshal.PtrToStringAnsi(native_output.szMessage), Marshal.PtrToStringAnsi(native_output.szLog), native_output.WarningFlags[0], native_output.WarningFlags[1], native_output.WarningFlags[2], native_output.WarningFlags[3]); CreateAtoms(output, native_output.num_atoms, native_output.atom); CreateBonds(output, native_output.num_atoms, native_output.atom); CreateStereos(output, native_output.num_stereo0D, native_output.stereo0D); FreeStructFromINCHI(ref native_output); return(output); } finally { Marshal.FreeHGlobal(szOptions); Marshal.FreeHGlobal(szInChI); } }
internal static extern void FreeStructFromStdINCHI([In] ref Inchi_OutputStruct pOut);
internal static extern int GetStructFromStdINCHI([In] ref Inchi_InputINCHI pinpInChI, [Out] out Inchi_OutputStruct pOutStruct);