.net
以有涯求无涯
.net开发程序员,学无止境
展开
-
c#完美区分USB条码枪与键盘输入的方案
对USB条码枪与键盘输入进行区分的最完美方案,焦点无需切换,无需判断录入间隔原创 2023-05-25 16:13:20 · 2029 阅读 · 5 评论 -
未找到元数据文件
原因,因为项目3引用了项目1,所以在编译时会优先编译项目1,又因为项目1引用了项目2,所以项目1会在编译时,寻找所依赖的项目2的编译结果,但项目1对项目2的引用设置是解决方案A设置的[引用项目]模式,而解决方案B中并没有将项目2加入进来,这就导致解决方案B并不能知道项目2所设置的目标编译路径是什么,只能根据项目1的引用信息到项目2的默认编译路径,也就是bin文件夹下去找,这自然是找不到的,所以就报出了编译错误。1、修改项目1对于项目2的引用为直接引用项目2的编译结果dll文件。原创 2023-05-23 10:59:56 · 1634 阅读 · 0 评论 -
利用windows事件查看器分析exe无法打开的问题
在exe出现运行无反应的时候,我们首先用DependenciesGui依赖分析工具,来分析软件是否缺少了哪些依赖,如果发现不缺少必须的依赖,那么就可能是程序在启动时发生了未经捕获处理的异常,那么我们可以借助windows的事件查看器来分析程序的未捕获的异常信息。如果在部署的客户机上无法用开发工具来进行调试,利用上面的手段,就可以大概定位到问题所在了。2、发生未捕获的异常。原创 2022-11-16 12:33:09 · 2147 阅读 · 0 评论 -
关于C#的RSA加密
那么问题来了,在C#的RSA加密工具类RSACryptoServiceProvider中,并没有支持PEM格式公钥为基准的加密方法,只能用一种.net平台认可的xml字符串的公钥才能够进行加密。一般对接第三方的接口时,接口提供方如果要求以RSA方式进行加密传输,并且给了你一串字符串说是RSA加密公钥,那么该公钥一般是PEM格式文件的base64字符串表现形式。另外如果在之后加密时报长度超长之类的错误,说明需要分段加密,因为RSA的加密机制要求:待加密的字节数不能超过密钥的长度值除以 8 再减去 11。原创 2022-09-28 09:31:28 · 8654 阅读 · 0 评论 -
使用VS的分析工具Fuslogvw分析加载依赖dll失败的问题
使用该工具可分析程序在进行dll探查与加载时出现的问题。原创 2022-08-24 15:24:38 · 503 阅读 · 0 评论 -
PowerShell调用C#代码
自己写了一个c#类,想用powershell(4.0)创建一个自定义的.net对象,但是不知道怎么加载改类(引用了Newtonsoft.Json)使用loadfile加载的时候错误如下[void][System.Reflection.Assembly]::LoadFile("E:\1.dll")使用“1”个参数调用“LoadFile”时发生异常:“该模块应包含一个程序集清单。换用add-type加载add-type -path e:\1.cs报错:未能找到类型或命名空间名称“Ne.转载 2022-03-25 17:07:52 · 2158 阅读 · 0 评论 -
关于GAC全局程序集缓存
GAC 与其物理路径GAC (Global Assembly Cache) 是 .NET 框架下程序集(Assembly)的一个全局缓存。不同 CLR (Common Language Runtime, 公共语言运行时) 版本,不同平台的程序集会被缓存在不同路径下。CLR 版本 对应 .NET 版本 程序集平台 -> 缓存位置 1.0 1.0 - -> %windir%\assembly\GAC 1.1 1.1 ->转载 2022-03-01 09:07:05 · 943 阅读 · 0 评论 -
通过注册表查看安装了哪些版本的.net Framework
win键加r调出运行窗口,录入regedit回车打开注册表编辑器其中HKLM为HKEY_LOCAL_MACHINE:1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 Install REG_SZ 等于11.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 Install REG_DWORD 等于12.0 HKLM\Software\Microsoft\NET F原创 2022-02-28 15:38:07 · 2860 阅读 · 0 评论 -
c#调用动态链接库随笔
例,动态链接库接口函数定义:int __stdcall testMethod(char* InData,char* OutData)字符编码:目标编码调用代码如下byte[] _ruStr = Encoding.Convert(源字符编码, 目标字符编码, 源字符编码.GetBytes("我是入参数据"));string _chuCanStr = "".PadLeft(出参预留长度数值, ' ');byte[] _chuStr = Encoding.Convert(源字符编码, 目标字原创 2021-10-26 15:35:32 · 271 阅读 · 0 评论 -
DEV 报表学习笔记
核心代码,给报表类新增带参构造函数: public XtraReport1(DataSet ds) { InitializeComponent(); DataSource = ds; DataMember = ""; clmDeptCode.DataBindings.Add("Text", ds.Tables[0], "DEPT_CODE"); clmD原创 2021-09-01 18:54:42 · 563 阅读 · 0 评论 -
使用C#方法默认参数的坑
一旦修改了方法中的默认参数,就需要将所有引用该程序集使用该方法的项目全部程序编译……所以说,如果不想全部程序编译,还是老老实实用方法重载吧。原创 2021-08-20 16:22:39 · 172 阅读 · 0 评论 -
DEV GridView如何确定一行数据是否显示在当前滚动界面范围内
使用GridView1.IsRowVisible()方法原创 2021-07-29 14:22:41 · 267 阅读 · 0 评论 -
解决DEV dockPanel出现重复的问题
成为DEV控件的bug,解决办法:在创建dockPanel之后不要修改其Name,使用默认Name即可防止出现该问题。原创 2021-07-01 14:31:30 · 201 阅读 · 0 评论 -
使用DEV布局控件DockManager、DocumentManager将焦点切换到一个布局模块之上
使用DockPanel的Show()方法即可自动将焦点转至该布局模块之上,如:dockPanel1.Show();原创 2021-06-21 09:50:42 · 874 阅读 · 0 评论 -
解决DEV自定义控件在使用时大小比例发生变化的问题
在控件的初始化代码之中加入以下代码:this.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));原创 2021-03-19 16:30:12 · 610 阅读 · 0 评论 -
C#利用PdfSharp开源类库将图片转换为Pdf并且上传至指定FTP
PdfDocument _pdfDoc = new PdfDocument(); _pdfDoc.AddPage(new PdfPage()); XGraphics _g = XGraphics.FromPdfPage(_pdfDoc.Pages[0]); Bitmap _b = new Bitmap(@"D:\Download\***.jpg"); ...原创 2021-03-11 10:42:56 · 1563 阅读 · 0 评论 -
DEV gridview数据筛选
使用gridview的ActiveFilterString属性进行数据筛选,格式如:gridview1.ActiveFilterString = "[姓名] = '张三' AND [性别] = '男'";原创 2021-03-04 13:38:18 · 1020 阅读 · 1 评论 -
c# TransparencyKey属性设置之后保证鼠标对透明位置依旧有效
只需要将TransparencyKey的颜色(r,g,b)设置为r值与值不同的颜色即可,如255,255,254原创 2021-02-26 09:05:49 · 574 阅读 · 0 评论 -
DEV gridview 获取单元格相对于的屏幕坐标
GridViewInfo info = gridview1.GetViewInfo() as GridViewInfo;GridCellInfo cellInfo = info.GetGridCellInfo(gridview1.FocusedRowHandle, gridview1.FocusedColumn);Point _cellPoint = new Point(cellInfo.Bounds.X, cellInfo.Bounds.Y);Point _screenPoint = gridCon原创 2020-11-26 14:15:06 · 486 阅读 · 0 评论 -
c#UDP协议通讯
在写具体的用c#实现UDP通讯的方式之前,我们要先搞清楚相关的概念,那就是什么是UDP协议。UDP和TCP一样,是同属于TCP/IP协议簇的传输层协议:这里一定要注意TCP/IP是指一堆协议的集合,而这些集合之中又属TCP协议和IP协议比较重要,所以就将此协议集合以TCP/IP的方式进行命名。那么UDP协议和TCP协议有什么区别呢?TCP协议是面向连接的协议,A端到B端要传输数据则需要进行三次握手建立连接,之后便是点对点的数据通讯,对于数据来说是可靠的。而UDP协议是一种非连接的协议原创 2020-07-01 16:15:51 · 782 阅读 · 1 评论 -
查看一个托管dll文件是64位、32位还是AnyCPU,和将托管32位dll与AnyCPU互相转换的方法
用ILDasm工具打开托管dll文件,然后打开该dll文件的自描述文件:或者使用VS命令CorFlags,注意,必须将文件与该命令工具放在同一盘符下:如果需要将32位的托管dll文件改为AnyCPU,或者将AnyCPU限定为只允许32位调用 ,也可以使用CorFlags进行处理。将32位托管程序转为AnyCPU命令:CorFlags /32BIT- C:\****\****.dll将AnyCPU托管程序转为32位命令:CorFlags /32BIT+C:\**..原创 2020-06-15 16:25:31 · 735 阅读 · 0 评论 -
注册COM组件的意义
注册COM组件有什么用?为什么要使用COM组件必须要先进行注册?这个注册过程中都执行了什么操作?有人说,注册COM组件的目的是要实现全局复用,但更精准的来说,应该说是为了实现全局复用+精准调用。为什么这么说?我们先来看注册COM组件时都发生了什么。实际上说来也简单,注册COM组件时主要是向系统注册表中存了这些东西:CLSID、组件文件绝对路径。其中CLSID是组件的GUID全球唯一码,如此可以保证在整个系统之中不会出现重复,然后再根据CLSID与组件的绝对路径相对照。这样的话,哪怕系统之内有同名原创 2020-06-08 13:03:05 · 727 阅读 · 0 评论 -
程序集(dll) 安装到 GAC && 程序集添加到VS引用开窗(转)
一 首先 程序集(dll) 安装到 GAC 中的方法 所谓的GAC,就是全局程序集缓存(Global Assembly Cache)。 针对一些类库项目或用户控件项目在程序开发完成后,有时需要将开发的程序集(dll文件)安装部署到GAC(全局程序集缓存)中,以便其他的程序也可以调用。被放入GAC的程序集,无论在何处被其他程序集引用,都可以保证自己能够被CLR找到并且加载。简单来说,GAC是一个有规范的目录结构。如果主机使用的是Windows操作系统,并且操作系统被...转载 2020-06-04 13:59:02 · 722 阅读 · 0 评论 -
关于.net项目引用的研究
托管平台项目引用,可以总结为4种:一、直接引用解决方案之内的项目这种引用的实际本质还是把引用项目的路径映射到了项目所编译的dll文件上,这个工作是开发工具替我们做的。使用这种方式在编译时会把所引用项目的编译结果给复制到当前项目的编译路径下。二、通过文件浏览引用类库也是最常用的引用方式,编译时会把引用dll文件给复制到编译路径之下。三、引用GAC(Global Assembly Cache)类库你所使用的任何基础类型,如System.***,都是.net平台类库所提供的,在安装.net原创 2020-06-04 13:25:31 · 550 阅读 · 0 评论 -
关于非托管资源GDI对象泄漏-解决问题随笔
要在一个庞杂的系统之中找到非托管资源泄漏的位置,是一个极为头痛的事情,所以在托管平台操作非托管资源一定要谨慎,用完便要及时释放,否则埋下的雷,过一段时间要费极大的代价和心力去找。更别提是要在别人杂乱的代码之中去找这颗雷了,就像我这次一样,都要累吐了。还好找到一个监测非托管资源句柄的工具,英文的,粗略的把程序汉化了一下,有想用的可以下载,这个是目前为止最新的版本。...原创 2020-06-01 17:12:07 · 418 阅读 · 0 评论 -
关于非托管资源
在.net托管平台,对于大多数对象,都可以依赖于.NET 垃圾回收器来进行回收,但是对于非托管对象却需要你手动去回收,以免造成资源泄漏从而引发程序崩溃问题,最常见的非托管资源类型是包含系统资源的对象,如文件、窗口、网络连接或数据库连接。虽然垃圾回收器可以跟踪封装非托管资源的对象的生存期,但无法了解如何发布并清理这些非托管资源。想要显示的释放非托管资源,我们需要将非托管资源的封装类实现IDisposable接口,在Dispose方法之中编写代码启用非托管资源的确定性释放。在这里引用微软的官方示例:.原创 2020-06-01 14:12:20 · 311 阅读 · 0 评论 -
关于程序资源文件-深入学习笔记
可以将字符串、图像、对象数据等资源包含在资源文件之中,以供程序使用。.net平台提供了5种资源方案的支持:一、创建一个包含字符串资源的文本文件。可以使用资源文件生成器 (Resgen.exe)将文本文件转换成二进制资源 (.resources) 文件。然后使用语言编译器将这个二进制资源文件嵌入可执行应用程序或应用程序库,或者使用程序集链接器 (Al.exe)将这个二进制资源文件嵌入附属程序集。有关详细信息,请参阅文本文件中的资源部分。二、创建一个包含字符串、图像或对象数据的 XML...原创 2020-06-01 13:14:28 · 329 阅读 · 0 评论 -
c#关于异步线程调用UI的心得
异步线程调用UI更新,一般情况之下为了线程安全,都要用UI对象的Invoke方法用委托的方式进行调用操作UI的代码。切记:若非万不得已,此操作则最好仅用来操作UI更新,不要夹杂无关的逻辑处理代码,不然依旧会耗费界面线程的占用时间,造成反应迟缓或者假死。如,这样写是不对的: private void button1_Click(object sender, EventArgs e) { //开启一个异步线程进行逻辑处理原创 2020-05-30 14:49:45 · 1684 阅读 · 0 评论 -
c#相对路径与绝对路径的快捷转换,随笔
将相对路径转为绝对路径:System.IO.Path.GetFullPath("../../../Lib");将绝对路径转为相对路径: /// <summary> /// 获取一个绝对路径与程序文件的相对路径 /// </summary> /// <param name="path">绝对路径字符串</param> /// <returns></ret原创 2020-05-22 16:57:53 · 1270 阅读 · 0 评论 -
vs生成事件命令行,随笔
复制文件到指定目录:copy "文件全路径" "目录路径"原创 2020-05-22 12:37:58 · 154 阅读 · 0 评论 -
最短的代码理解MEF组件装载框架的核心
using System;using System.Collections.Generic;using System.ComponentModel.Composition;using System.ComponentModel.Composition.Hosting;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApp2{ public interface ILo.原创 2020-05-20 10:36:17 · 216 阅读 · 0 评论 -
关于HRESULT码详解
如果在托管平台调用非托管的COM组件,而在组件之中又引发了错误,那么COM组件会以什么样的形式把错误返回给托管代码呢?答案就是HRESULT。相信许多朋友对该HRESULT码都不陌生,电脑中经常出现一堆莫名其妙的报错,就会给你弹出一堆错误编码,而那个编码,就是HRESULT。所以HRESULT到底是个啥玩意?接着看下去,你就知道了。根据微软提供的文档我们可以得知,HRESULT码是一个32位的数值:HRESULT码结构 0 1原创 2020-05-14 15:38:46 · 2442 阅读 · 0 评论 -
负数数值与十六进制字节互转过程
1、取负数绝对值2、取绝对值二进制码3、取反码4、反码结果最低位补码15、转为十六进制字节将上述步骤逆转,即可将十六进制字节转为负数数值。PS:上述转换默认数值包含符号位,如需将十六进制字节转为数值,需要明确该十六进制字节是否为有符数值,若为有符号数值,最高位0为正数,1为负数。...原创 2020-05-14 13:39:55 · 7626 阅读 · 0 评论 -
托管平台调用的参数封送
在平台调用中,因为托管类型和非托管类型之间有差异,所以需要进行入参与出参的封送才可正常的调用非托管的函数。在所有要进行封送的参数类型之中,大体分为两种:可直接复制到本机结构中的类型(blittable)和非直接复制到本机结构中的类型(non-bittable)blittable类型转换对照表: Windows 数据类型 非托管数据类型 托管数据类型 托管数据类型解释 BYTE/Uchar/UInt..原创 2020-05-13 14:54:46 · 213 阅读 · 0 评论 -
c#通过动态链接库的方式调用c/c++dll文件时的注意事项
首先,注意相应的参数类型转换,这点自然是不用多说的。其次最好是采用如下的写法在代码中来引入dll文件中的方法,举例: [DllImport("user32.dll",EntryPoint = "MessageBoxA",CharSet = CharSet.Ansi)] public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); priva...原创 2020-05-12 15:42:46 · 255 阅读 · 0 评论 -
c#调用win32api的自动关闭提示框,6种样式
代码: /// <summary> /// 倒计时关闭提示框 /// </summary> /// <param name="hWnd">窗口句柄</param> /// <param name="text">提示内容</param> /// <param name="caption">提示标题</param>原创 2020-05-12 14:44:31 · 683 阅读 · 0 评论 -
托管代码调用非托管代码的方式总结
基于.net开发,托管的便利好处自然不用再多言,垃圾回收、内存管理等等,加之强大的FCL类库作支持后盾,一般情况下我们都不会直接用到非托管代码,一些常用的底层api都已经被FCL类库进行了很好的封装,我们只需要知道用到哪一个类即可。但是类库虽然强大,却非万能的,总有一些基于底层的api没有被封装,或者说程序要调用一些第三方的接口,一般都是c/c++的dll。就我本人所知,许多地区的医疗保险接口便都是非托管代码,如c++写的。在这种情况之下,我们便要考虑到托管代码对于非托管代码的调用问题了,这种技术称原创 2020-05-12 13:21:40 · 1216 阅读 · 0 评论 -
使用.net角色类进行简单的程序权限控制,随笔
代码: private void button1_Click_1(object sender, EventArgs e) { GenericIdentity identity = new GenericIdentity("HU"); GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "1", "2", "3" });原创 2020-05-09 10:41:55 · 176 阅读 · 0 评论 -
关于自定义控件的随笔
在VS设计器中使用自定义控件,需要先保证包含该自定义控件的项目已被成功编译,实际上该控件在被设计器使用之时,部分内部逻辑已经在被调用了,比如说如果重写OnPaint方法,那么其中的逻辑代码便会被调用,就像下面这个简单的控件:using System;using System.Collections.Generic;using System.ComponentModel;using Sy...原创 2020-05-08 17:08:12 · 180 阅读 · 0 评论 -
.net提供的事件委托
在许多情况下,我们需要给类提供事件,把逻辑的触发在本类中进行,逻辑的植入交给调用方。其实我们都知道这不过是委托的一种特殊应用,许多同学都因为要用到自定义事件,就立即想到去定义一个委托。实际大多数情况之下,这都是一种多余的定义,因为.net类库已经给我们提供了适用于事件的委托,下面粗列几种:EventHandler:表示将处理不包含事件数据的事件的方法,是.net类库中事件委托的基类,一般情况下...原创 2020-05-08 15:07:05 · 216 阅读 · 0 评论