using System; using System.Collections.Generic; using System.Windows; using System.Windows.Forms; using System.Text; using System.Runtime.InteropServices; using System.Diagnostics; using nativeCom; public class funs{ static funs _ins; public static funs instance{get{if(_ins==null)_ins=new funs();return _ins;}set{_ins=value;}} public byte[] StructToBytes(object structObj) { int size = Marshal.SizeOf(structObj); IntPtr buffer = Marshal.AllocHGlobal(size); try { Marshal.StructureToPtr(structObj, buffer, false); byte[] bytes = new byte[size]; Marshal.Copy(buffer, bytes, 0, size); return bytes; } finally { Marshal.FreeHGlobal(buffer); } } unsafe public object clone(object obj){ byte[] bt=StructToBytes(obj); fixed(byte* pb=bt ){ IntPtr itp=new IntPtr(pb); return Marshal.PtrToStructure(itp, obj.GetType()); } } ABlock a1=new ABlock(); ABlock a2=new ABlock(); /// /// 把bt总的数值 写入到ab指针中 偏移ofs个值 /// /// /// /// unsafe public void memToNative_bytes(byte[] bt,ref ABlock ab,int ofs){ fixed(byte* pb=bt ){ IntPtr pt= new IntPtr( (int)ab.pt+ofs); NativeDllMethod.nativefun("1",((int)pb ).ToString()+'*'+pt.ToString()+'*'+bt.Length.ToString(),ref a1,ref a2); // // myCom_zyx.Instance.move2Process((int*)pb,new IntPtr( (int)ab.pt+ofs),bt.Length); } } unsafe public void memToNative_bytes_(byte[] bt,int addr_){ ABlock ab= new ABlock(); int* ttt=(int*)&ab; myCom_zyx.Instance.getDataOfStruct(addr_, ref ab,ttt); memToNative_bytes(bt,ref ab,0); } /// /// 获取服务器所在的路径 /// /// public string getSeverPath(){ return Application.StartupPath; } /// /// 获取服务规则路径 /// /// public string getGzPath(){ //待换 return getSeverPath() + "/mjgz.xml"; } }