关于[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] 的解释 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] 这是C#引用非托管的C/C++的DLL的一种定义定义结构体的方式,主要是为了内存中排序,LayoutKind有两个属性Sequential和Explicit Sequential表示顺序存储,结构体内数据在内存中都是顺序存放的Explicit表示精…
首先介绍一下 结构体和类的区别 :类是按引用传递 结构体是按值传递进入正题:结构体是由若干成员组成的.布局有两种1.Sequential,顺序布局,比如struct S1{int a;int b;}那么默认情况下在内存里是先排a,再排b也就是如果能取到a的地址,和b的地址,则相差一个int类型的长度,4字节[StructLayout(LayoutKind.Sequential)]struct S1{int a;int b;}这样和上一个是一样的.因为默认的内存排列就是Sequential,也就是…
  结构体是由若干成员组成的.布局有两种1.Sequential,顺序布局,比如struct S1{ int a; int b;}那么默认情况下在内存里是先排a,再排b也就是如果能取到a的地址,和b的地址,则相差一个int类型的长度,4字节[StructLayout(LayoutKind.Sequential)] struct S1{ int a; int b;}这样和上一个是一样的.因为默认的内存排列就是Sequential,也就是按成员的先后顺序排列.2.Explicit,精确布局需要用Fi…
参考网址: https://blog.csdn.net/hongkonglife/article/details/23422857 结构体是由若干成员组成的.布局有两种1.Sequential,顺序布局,比如struct S1{ int a; int b;}那么默认情况下在内存里是先排a,再排b也就是如果能取到a的地址,和b的地址,则相差一个int类型的长度,4字节[StructLayout(LayoutKind.Sequential)] struct S1{ int a; int b;}这样和…
StructLayout特性 StructLayout特性          公 共语言运行库利用StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列.如果要将类 传递给需要指定布局的非托管代码,则显式控制类布局是重要的.它的构造函数中用 LayoutKind值初始化 StructLayoutAttribute 类的新实例. LayoutKind.Sequential 用于强制将成 员按其出现的顺序进行顺序布局.   StructL…
StructLayout特性          公共语言运行库利用 StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列.如果要将类传递给需要指定布 局的非托管代码,则显式控制类布局是重要的.它的构造函数中用 LayoutKind值初始化 StructLayoutAttribute 类的新实例. LayoutKind.Sequential 用于强制将成 员按其出现的顺序进行顺序布局.   StructLayout特性允许我们控制St…
转自:http://www.cnblogs.com/JessieDong/archive/2009/07/21/1527553.html StructLayout特性 StructLayout特性          公共语言运行库利用StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列.如果要将类传递给需要指定布局的非托管代码,则显式控制类布局是重要的.它的构造函数中用 LayoutKind值初始化 StructLayoutAttr…
1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下一曲或是找个好听的歌来听...但是,[移动手锁定鼠标-->移动鼠标关闭当前页面选择音乐软件页面-->选择合适的音乐-->恢复原来的界面] 这一过程也会烦人不少,如果说软件的设计要在用户体验上做足功夫,感觉这一点是软件设计人员很难管住的方面,毕竟操作系统也就这样安排的嘛(当然,有些机智的开发人…
同源策略(Same Origin Policy)的存在导致了"源"自A的脚本只能操作"同源"页面的DOM,"跨源"操作来源于B的页面将会被拒绝.同源策略以及跨域资源共享在大部分情况下针对的是Ajax请求.同源策略主要限制了通过XMLHttpRequest实现的Ajax请求,如果请求的是一个"异源"地址,浏览器将不允许读取返回的内容.JSONP是一种常用的解决跨域资源共享的解决方案,现在我们利用ASP.NET Web API自身…
1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1);   2.创建文件 //using System.IO; File.Create(%%1);   3.删除文件 //using System.IO; File.Delete(%%1);   4.删除文件夹 //using System.IO; Directory.Delete(%%1);   5.删除一个目录下所有的文件夹 //using System.IO; foreach (s…
手动跨域操作文件 补录:跨域访问文件夹文件是一种常见的需求,下面主要介绍的的通过代码使用具有权限账号的人来达到跨域操作文件的能力. 现在补充一下普通的一些需求场景,今天就遇到了一种需要经常需要登录远程服务器来部署文件的情况?  但是远程服务器限制了登录人数同时在线2人,每次我想发布新版本到测试服务器时都需要等别人断开连接后才可以.  那么学了这个知识后,我们就可以在我们本地就可以远程操作文件的删除,更新. 也很简单,下面的代码全不管,直接自己手动添加一个网络驱动器(驱动盘随机),填写上需要影射的…
API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信.API 的一个主要功能是提供通用功能集.程序员通过使用 API 函数开发应用程序,从而可以避免编写无用程序,以减轻编程任务. API 同时也是一种中间件,为各种不同平台提供数据共享.根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以…
一.背景 前段时间服务器出了点问题,加上学业愈来愈紧张,写博文分享的时间越来越少.虽然不是第一次在博客园上写经验,但是近期分享的博文得到了不少的朋友支持和指正,在这里内心非常感激和开心.希望以后能认真用好时间,把一些有用的经验分享给需要的人,当然本科阶段的我还有许多不懂的,如果在文章中有错误,希望大家多多指正,必虚心受教. 今天要分享的是使用c#获取服务器CPU.RAM.TCP.磁盘使用情况.前段时间,做了一个几十人的并发测试,服务器宕机了,后来上控制管理台检查测试时间段里服务器各项数据,可惜没…
typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint p[2]; unsigned char name[20]; unsigned int mark[5]; }mLine; //线坐标 如上一个C++的结构体Line,分别有3个数组 结构体数组 字节数组 int数组 简单翻译成C#如下: public struct Point{ public usho…
结构体的一些相关知识 可直接转换类类型,比如int类型,在托管代码和非托管代码中占据内存大小 和意义都是一个样的. 结构体封送的关键是:在托管代码和非托管代码中定义的一致性.什么是定义的一致性?包括结构体的对齐粒度:结构体成员的顺序和每个结构体成员在托管代码和非托管代码中的占据内存的大小.本来想着是只是类型一样就行了,但是像布尔类型,在托管代码中占据1个字节,但是在非托管代码中是4个字节,也就是非可直接转换类型. 对齐粒度.这个东西感觉和内存布局有关,以前有一个错误的理念:在一个结构体中定义了一…
主要是看默认封送处理行为 按类成员的类型是否为“可直接传递到非托管内存”的类型来分类;按照成员中是否有“可直接传递到非托管内存”的类型来讨论. 所有成员都是“可直接传递到非托管内存”的类型 托管代码和非托管代码: //托管代码 ClassStruct cs = new ClassStruct(); cs.a = ; cs.d = ; DoClassStruct(cs); Console.Read(); } [StructLayout(LayoutKind.Sequential)] class C…
在Vista系统之后,微软为窗体程序提供了Aero磨砂的效果,如下图.那么用C#如 何来实现这种磨砂效果呢? 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; u…
在C/S端编程的时候,经常要在C端和S端之间传数据时自定义一下报文的帧头,如果是在C/C++,封装帧头是一件很简单的事情,直接把unsigned char *强转为struct就行,但是在C#中,并没有提供直接从struct到byte[]的转换,这个时候就需要用到Marshal等非托管的方法了. 自定义帧 我们可以在C#中写出如下代码: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = ,Size = )] […
起初使用的方法是修改完一次代理之后就不能继续修改,需要重新启动一次进程才可以,最初代码是: private void ShowProxyInfo() { if (!GetProxyStatus()) { lblInitInfo.Text = "代理未启用:"; } else { lblInitInfo.Text = "当前使用的代理是:" + GetProxyServer(); } } private void InitProxyData() { List<s…
最近公司做一个考试系统,需要一个答题栏,要求:占用屏幕上方一部分区域,而且始终置顶,当其他窗口最大化时"答题栏"始终置前并且不遮挡最大化窗口的任何部分!就像windows任务栏一样. 最终效果图如下: 首先,我们必须声明所需的结构和常量. 我们声明RECT WINAPI结构如下: [StructLayout(LayoutKind.Sequential)] struct RECT { public int left; public int top; public int right; p…
最近项目中需要使用HTTP与Socket,把自己这段时间学习的资料整理一下.有关Socket与HTTP的基础知识MOMO就不赘述拉,不懂得朋友自己谷歌吧.我们项目的需求是在登录的时候使用HTTP请求,游戏中其它的请求都用Socket请求,比如人物移动同步坐标,同步关卡等等. 1.Socket Socket不要写在脚本上,如果写在脚本上游戏场景一旦切换,那么这条脚本会被释放掉,Socket会断开连接.场景切换完毕后需要重新在与服务器建立Socket连接,这样会很麻烦.所以我们需要把Socket写在…
C#与C++交互,总体来说可以有两种方法: 利用C++/CLI作为代理中间层 利用PInvoke实现直接调用 第一种方法:实现起来比较简单直观,并且可以实现C#调用C++所写的类,但是问题是MONO构架不支持C++/CLI功能,因此无法实现脱离Microsoft .NET Framework跨平台运行. 第二种方法:简单的实现并不麻烦,只要添加DllImportAttribute特性即可以导入C/C++的函数,但是问题是PInvoke不能简单的实现对C++类的调用.在Warensoft3D中为了…
C# 方法 [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall, CharSet = CharSet.Ansi)] public delegate void RecvSwitchStatusCallback(string no, int noLength, IntPtr cpointer, int dataLength); public static void RequestRecvSwitchStatusCallback(s…
App.xaml.cs protected override void OnStartup(StartupEventArgs e) { //禁止二次启动 this.Startup += new StartupEventHandler(App_Startup); base.OnStartup(e); } #region 禁止二次启动 // 用于激活已打开的窗体 [DllImport("user32.dll")] public static extern void SetForegroun…
Win32API.cs   using System;using System.Drawing;using System.Runtime.InteropServices;using Lordal.Window.Form.Lib.General;using Lordal.Window.Form.Lib.Win32; namespace Lordeo.Framework{ /// /// Windows API Functions /// public class Win32API { #regio…
测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); string xx = sw1.ElapsedMilliseconds.ToString(); MessageBox.Show(xx); 方法一,(1张30M图片,用时799毫秒) public Image getThumbNailUsingGetThumbnailImage(string fileName…
C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword) +BIT祝威+悄悄在此留下版了个权的信息说: C#申请一个大数组(Use a large array in C#) 在C#里,有时候我需要能够申请一个很大的数组.使用之.然后立即释放其占用的内存. Sometimes I need to allocate a large array, use it and then release its memory…
private void btnPrinter_Click(object sender, EventArgs e) { #region ESC 热敏图像点阵像素点读取打印 //Bitmap bitmap = new Bitmap(@"D:\450X100.bmp"); //NetPOSPrinter netPOSPrinter = new NetPOSPrinter(); //netPOSPrinter.PrintPic(bitmap); #endregion #region EPL…
需要调用win32api,winform.wpf通用 代码如下: [DllImport("user32.dll")] public static extern bool GetCursorPos(out POINT lpPoint); [StructLayout(LayoutKind.Sequential)] public struct POINT { public int X; public int Y; public POINT(int x, int y) { this.X = x…
方法一:调用windows自带的shutdown.exe (缺点:会出现倒计时窗口) System.Diagnostics.Process.Start("shutdown.exe", "-r -f -t 15"); shutdown参数含义:-r关闭并重启动此计算机:-f 强制运行的应用程序关闭而没有警告:-t 15 延时15秒shutdown.exe的详细用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m //comput…