问题描述
反编译了一个第三方DLL文件。编译后出现很多错误提示:“无法显示调用运算符或访问器”。画红框位置都是显示该提示。如下图:以下是源码:usingMicrosoft.Office.Interop.Excel;usingSystem;usingSystem.Data;usingSystem.Runtime.InteropServices;usingSystem.Web;namespaceCRM.Utility.Tif{publicclassExportExcel{publicstringexport(DataSetds,stringpath){stringstr="";Applicationo=newApplicationClass();try{o.set_DisplayAlerts(false);o.set_Visible(false);Workbooksworkbooks=o.get_Workbooks();workbooks.Add(Type.Missing);Workbookworkbook=o.get_ActiveWorkbook();Sheetssheets=workbook.get_Worksheets();sheets.Add(Type.Missing,Type.Missing,Type.Missing,Type.Missing);Worksheetworksheet=(Worksheet)sheets.Default(1);intcount=ds.Tables[0].Columns.Count;intnum2=0;while(num2<count){worksheet.get_Cells().set__Default(1,num2+1,ds.Tables[0].Columns[num2].Caption.ToString());num2++;}for(inti=0;i<ds.Tables[0].Rows.Count;i++){for(num2=0;num2<count;num2++){worksheet.get_Cells().set__Default(i+2,num2+1,ds.Tables[0].Rows[i][num2].ToString());}}str=HttpContext.Current.Server.MapPath(path)+@"MyExcel"+HttpContext.Current.Session["UserId"].ToString()+".xlsx";o.set_AlertBeforeOverwriting(false);worksheet.SaveAs(str,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);workbook.Close(null,null,null);Marshal.ReleaseComObject(worksheet);Marshal.ReleaseComObject(sheets);Marshal.ReleaseComObject(workbook);Marshal.ReleaseComObject(workbooks);Marshal.ReleaseComObject(o);workbooks=null;workbook=null;sheets=null;worksheet=null;GC.Collect();}finally{o=null;}returnstr;}}}
解决方案
解决方案二:
百度了一下,说是反编译的软件自动在前面加上了set或get;但是去掉后,又出现了下面的错误提示:
解决方案三:
看起来,还不如读懂代码,自己重写呢。
解决方案四:
Workbooks是属性,不是方法。因此要这样Workbookswordbooks=o.Workbooks;其他的应该一样。
解决方案五:
反编译程序没有正确处理索引器和属性。“百度了一下,说是反编译的软件自动在前面加上了set或get”错了,不是反编译软件加上的,而是C#编译器在编译的时候实际上把属性编译成get_和set_开头的方法。
解决方案六:
自己顶一下!!急!
解决方案七:
o.DisplayAlerts=false;o.Visible=false;Workbooksworkbooks=o.Workbooks;workbooks.Add(Type.Missing);Workbookworkbook=o.ActiveWorkbook;Sheetssheets=workbook.Worksheets;这样你试试,应该就能好使了
解决方案八:
1.属性其实是一类特殊方法;2.编译时,编译器会在加上get,set前缀然后按照方法的方式来访问;3.获取属性和给属性赋值那里改下,按照正常的写法就行了。
解决方案九:
请问楼主是怎么解决的