WPF调用C/C++DLL出现异常:System.StackOverflowException
一、问题描述
项目要求调用某公司的DLL链接库操作LED设备,要求使用WPF开发该应用程序。链接库为pArmSendQt.dll ,操作为:
【函数格式】
int SS_Send_Power_On (void)
【函数参数】
WPF调用C/C++DLL出现异常:System.StackOverflowException
一、问题描述
项目要求调用某公司的DLL链接库操作LED设备,要求使用WPF开发该应用程序。链接库为pArmSendQt.dll ,操作为:
【函数格式】
int SS_Send_Power_On (void)
【函数参数】
Aspx中使用cs中的函数及成员时需要注意该函数类型为protected或者public
Asp.net的服务端控件和客户端控件ID不见得一样。服务端控件在内网环境和后台环境下使用是很方便的。而HTML控件用于前台。物尽其用。
获取客户端控件ID方法: 服务端id.ClientID
document.getElementById(‘<%=TextBox1.ClientID%>’)
JQuery同理。
Aspx中asp标签的控件的css样式:CssClass=”…”,等同于HTML中class属性。也可以单独修改控件样式,但不建议这样做。会生成大量冗余代码。
控件的Attributes用于设置控件的额外属性。
Label渲染成Span,若设置了AssociateControlID属性,就渲染成label,且for属性为关联的控件id。
Literal不做任何渲染,就是文本。将其mode属性设置为encode后,可以自动对文本进行编码,防止xss漏洞。
TextBox控件的AutoPostBack属性为true时,当该控件失去焦点,就自动Post。ASP.net中要提交表单时最好使用_doPostBack()方法。
RadioButton渲染为 input type=”radio”, 通过GroupName进行分组。
Button等控件可以通过Command以及CommandName,CommandArgument来统一处理。
Panel是容器,如果GroupingText的属性设置了,就渲染成有filedset的div,否则直接为div
HyperLink,能将虚拟路径转化为客户端路径。
FileUpload控件使用说明:需要增加上传文件的类型及权限。防止恶意攻击。
Jquery使用注意:$(“#<%=TextBox1.ClientID%>”).val() 只有<%%>里的是服务端代码。
控件的display:none和visibility:hidden都能实现隐藏,区别是:display:none不占空间
页面中的IsValid属性用来判断所有验证控件是否验证完成
控件的CausesVilidation属性为false则该控件不能被验证控件验证。
Get通过url显式传递参数,参数传递长度有限
Post隐式传递,可以传递数据量较大的数据
表单只可提交有name 的input 、select、textarea的value。对于不能提交value的,例如div。可以用hidden类型的input代替传送。这就是ASP.NET的viewstate机制的由来。
大量的数据不能存储在hidden或者viewstate中,会增加上传流量,导致网页速度变慢。同时表单中不能存储机密数据,会造成数据欺骗。
后台变量不能保存B端的值,对此引用session机制与cookie。Session是B端用户相关信息与S端内存的对应关系。Cookie将这些信息数据保存在本地。Session中不能存储过大的数据,并且超过一段时间会自动清除。例如在线编辑文章,编辑时间过长导致提交时出现文章提交失败,超时或者丢失。优化网页案例:网站主站域名与音乐站,图像站等大流量子站域名区分开,防止cookie的大量提交更新。
每一个请求都会new一个实现了IHttpHandler接口的类的实例进行处理,用完后就GC,不会保留。
JS作为客户端校验能方便用户,但js被禁用后会引起不必要的麻烦,所以数据限制等功能还要在服务端做处理。
asp:Button标签中 OnClientClick为客户端点击事件,onclick是服务端点击事件。
VirtrualPathUtility虚拟路径方法:
ToAbsolute(“/ex.aspx”) 将虚拟路径/ex.aspx转换为绝对路径
AppendTrailingSlash(“”) 判断虚拟路径最后是否有/,如果没有就加上
Combine(“”,””) 合并两路径,需要注意路径一的末尾如果没有/就找到最后一个/处进行合并,例如Combine(“/a/b”,”c.html”)合并为/a/c.html
最近学习《大话设计模式》,在学习的过程中又加深了对OO的理解,诸如abstract和virtual的区别之类的问题有了清晰的认识。今天通过装饰模式,重温OO的继承,巩固子类于父类的构造函数调用,子类调用父类方法等问题。
先看一段代码:
1 | class Person |
然后我们在主函数中实例化子类Man
1 | Man jack = new Man(); |
Assembly即程序集是一个由类型定义、数据文件和资源文件组成的逻辑集合。每个程序集都包含一个程序集清单,该清单通常被附加在某个头文件上,也可以设置单独建立一个文件来包含该清单。
在编译程序集中间代码之前,CLR需要找到合适的程序集中间代码,其加载机制分为主动加载方式与通过名称、版本、文化和公钥来加载程序集。
程序集的加载可以完全忽略任何策略,由程序员在程序中显式的通过位置加载。System.Reflection.Assembly.LoadFrom提供了这个功能。此方法通过接收一个codebase风格的字符串,用以确定所要加载程序集的位置:
1 | String codebase = @"../../../example/Compile/Compile.dll"; |
CTS、CLS和CLR是.Net框架的基本概念,但往往成为程序员忽视的部分。
CLR即Common Language Runtime, 可以把CLR理解为一个包含运行.Net程序的引擎和一些符合公共语言基础结构的类库的集合。它是一个规范的CLI实现。所谓的.Net框架一般就是指公共语言运行库。
CLI公共语言基础,是微软向ECMA提交的一份语言和数据格式规范(包括了CTS,中间语言CIL、底部文件格式和元数据格式等),它是目前为止,唯一一个公共语言基础的实现版本。
CTS的全称为Common Type System 通用类型系统。定义了一个能够在CLR上运行的语言规范,需要注意的是,尽管很多语言本省不符合CTS规范,但通过加强编译器,改变语言附加规范等手段,使得许多语言能够编写出在CLR上运行的程序,比如C++
CLS公共语言规范是CTS的一个子集,它定义了希望编写在.Net平台上运行的程序的语言所需符合的最小的规范。因为.Net允许由不同语言编写的程序一起运行,所以制定出CLS规范。
不管是在winform还是在WPF中,我们要做一个进度条,用在一个大循环或者一个耗时的处理中,首先想到的就是多线程。否则进度条会出现假死现象,进度条不会更新。做多线程是比较麻烦的,如果只是简单的更新UI,可以用Systems.DoEvents。
在winform中,使用PeekMessage处理完消息队列,使UI有机会更新。在WPF中,可以在Dispatch里使用PushFrame达到同样的效果。
1 | public void DoEvents() |
写了这个方法后,我们在循环中或者事件中,在需要更新的UI后面调用一下DoEvents()就可以了。
当我们在对sql server进行复制,重命名,移动,删除操作时,由于系统将sql服务开启,所以无法直接进行操作,需要将服务停止,操作完成之后再重新开启。停止与开启的方法可以利用SQL Server Management Studio,还可以在cmd下使用net start/stop mssqlserver。在C#程序中,为了方便对sql服务的开关,可以用以下两种方法:
方法一:利用C#执行cmd语句net start/stop mssqlserver。此方法就不详细叙述了。
方法二:利用进程控制。
先添加引用
原作者:reonlyrun
1.静态变量和非静态变量的区别?
静态变量: 静态变量使用 static 修饰符进行声明 在所属类被装载时创建 通过类进行访问 所属类的所有实例的同一静态变量都是同一个值 非静态变量: 不带有 static 修饰符声明的变量称做非静态变量 在类被实例化时创建 通过对象进行访问 同一个类的不同实例的同一非静态变量可以是不同的值
2.const 和 static readonly 区别?
const 用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序 static readonly 用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化
1 | FileStream fs = File.OpenRead(filepath); //filepath文件路径 |
1 | BitmapImage BI = new BitmapImage(); |