public static CREATESOUNDEXINFO_INTERNAL CreateFromExternal(ref CREATESOUNDEXINFO exinfoExt)
{
CREATESOUNDEXINFO_INTERNAL exinfoInt = new CREATESOUNDEXINFO_INTERNAL();
exinfoInt.cbsize = Marshal.SizeOf(typeof(CREATESOUNDEXINFO_INTERNAL));
exinfoInt.length = exinfoExt.length;
exinfoInt.fileoffset = exinfoExt.fileoffset;
exinfoInt.numchannels = exinfoExt.numchannels;
exinfoInt.defaultfrequency = exinfoExt.defaultfrequency;
exinfoInt.format = exinfoExt.format;
exinfoInt.decodebuffersize = exinfoExt.decodebuffersize;
exinfoInt.initialsubsound = exinfoExt.initialsubsound;
exinfoInt.numsubsounds = exinfoExt.numsubsounds;
exinfoInt.inclusionlist = exinfoExt.inclusionlist;
exinfoInt.inclusionlistnum = exinfoExt.inclusionlistnum;
exinfoInt.pcmreadcallback = exinfoExt.pcmreadcallback != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.pcmreadcallback) : IntPtr.Zero;
exinfoInt.pcmsetposcallback = exinfoExt.pcmsetposcallback != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.pcmsetposcallback) : IntPtr.Zero;
exinfoInt.nonblockcallback = exinfoExt.nonblockcallback != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.nonblockcallback) : IntPtr.Zero;
exinfoInt.dlsname = exinfoExt.dlsname;
exinfoInt.encryptionkey = exinfoExt.encryptionkey;
exinfoInt.maxpolyphony = exinfoExt.maxpolyphony;
exinfoInt.userdata = exinfoExt.userdata;
exinfoInt.suggestedsoundtype = exinfoExt.suggestedsoundtype;
exinfoInt.fileuseropen = exinfoExt.fileuseropen != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.fileuseropen) : IntPtr.Zero;
exinfoInt.fileuserclose = exinfoExt.fileuserclose != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.fileuserclose) : IntPtr.Zero;
exinfoInt.fileuserread = exinfoExt.fileuserread != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.fileuserread) : IntPtr.Zero;
exinfoInt.fileuserseek = exinfoExt.fileuserseek != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.fileuserseek) : IntPtr.Zero;
exinfoInt.fileuserasyncread = exinfoExt.fileuserasyncread != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.fileuserasyncread) : IntPtr.Zero;
exinfoInt.fileuserasynccancel = exinfoExt.fileuserasynccancel != null ? Marshal.GetFunctionPointerForDelegate(exinfoExt.fileuserasynccancel) : IntPtr.Zero;
exinfoInt.fileuserdata = exinfoExt.fileuserdata;
exinfoInt.filebuffersize = exinfoExt.filebuffersize;
exinfoInt.channelorder = exinfoExt.channelorder;
exinfoInt.channelmask = exinfoExt.channelmask;
exinfoInt.initialsoundgroup = exinfoExt.initialsoundgroup;
exinfoInt.initialseekposition = exinfoExt.initialseekposition;
exinfoInt.initialseekpostype = exinfoExt.initialseekpostype;
exinfoInt.ignoresetfilesystem = exinfoExt.ignoresetfilesystem;
exinfoInt.audioqueuepolicy = exinfoExt.audioqueuepolicy;
exinfoInt.minmidigranularity = exinfoExt.minmidigranularity;
exinfoInt.nonblockthreadid = exinfoExt.nonblockthreadid;
exinfoInt.fsbguid = exinfoExt.fsbguid;
return exinfoInt;
}