CSharp教程
- 格式:ppt
- 大小:1.65 MB
- 文档页数:35
第一篇编译C的动态连接库在实际工作中,我们经常会将C语言中的.lib和.h文件(静态库)编译成动态连接库.dll 文件(这里只提供这两种文件,没有完整的工程),以提供给其他语言平台调用。
1,必须有.lib文件,只有.h文件是无法编译动态连接库的。
2,我使用的是VS2008,这里打开VS,新建项目—〉win32控制台应用程序,输入项目名称,点击确定,图示如fig.1所示。
Fig.13,点击下一步,依次如图fig.2-3所示,最后点击完成,就会生成一个带有.cpp的文件。
Fig.2Fig.34,打开项目—属性—配置属性—链接器—输入,如下图fig.4所示,在附加依赖项中加入你要添加的.lib文件,如果有一些系统.lib库没有添加或出现错误,可以在忽略特定库中添加该库。
注意:如果编译的dll文件调用中出现“xx.dll中找不到函数xx的入口点”,很有可能是一个xx.def文件没有添加,该文件的内容是EXPORTS 函数名@+序号。
如果这个文件中没有你要调用的API 函数,那么你在C#中是调用不到这个函数的,同时这个文件你可以同坐记事本自己编辑,注意Fig.45,在.cpp文件中添加.h文件的引用,不需要把所有的.h文件都引用进去,只需要.lib 文件入口相关的.h文件。
6,最后把.lib和.h文件拷贝到工程debug目录里,生成解决方案就Ok了,你会发现.dll 在debug目录中出现。
第二篇C#调用C/C++的动态连接库1,清楚C++与C#类型对应关系,即调用关系:C基本类型对照关系----VS2008:除此之外,c++:HANDLE(void *) ---- c#:System.IntPtrc++:WORD(unsigned short) ---- c#:System.UInt16c++:DWORD(unsigned long) ---- c#:System.UInt32c++:结构体 ---- c#:public struct 结构体{};c++:结构体 &变量名 ---- c#:ref 结构体变量名c++:结构体 **变量名 ---- c#:outc++:GUID ---- c#:Guidc++:UINT8 * ---- c#:ref bytec++:char*/void*(指向一个字符串) ---- c#:string对于结构体中的指针数组,对应于C#中的IntPtr[]类型,如:int * a[] -------------- IntPtr[]a2,清楚在C#中调用C/C++.dll文件的一般格式using System.Runtime.InteropServices; //必须引用的命名空间[DllImport("user32.dll")]public static extern ReturnType FunctionName(type arg1,type arg2,...);//必须定义为类的静态外部的方法3,[DllImport(参数)]设定①“xx.dll”:dll文件名字②CharSet :控制调用函数的名称版本及指示如何向方法封送 String 参数。
Csharp进行xls文件操作方法Excel对象微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。
(1) Application对象。
Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
(2) Workbook对象。
Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
(3) Worksheet对象。
Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4) Range对象。
Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
C#中的受管代码和非受管代码在.NET公用语言框架内运行的程序为受管代码。
受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。
受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。
相对而言,那些在.NET框架外运行的程序为非受管代码。
比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。
C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。
Visual C#中调用Excel的COM组件一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。
这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。
所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。
C#,深入浅出全接触目录表一、什么是C#?二、Java与C#三、C#的主要特征四、安装运行环境五、C#编辑器六、C#的程序结构七、C#和名称空间八、C#中一个经典例程的编写与编译九、C#编程实战演习ABC1、使用Visual Studio .NET编写C#程序2、使用Visual C#创建Windows应用程序3、创建C#类库(Dll)一、什么是 C#?C# 是由Microsoft开发的一种新型编程语言,由于它是从C和C++ 中派生出来的,因此具有C++的功能。
同时,由于是Microsoft公司的产品,它又同 VB一样简单。
对于web开发而言,C#象 Java,同时具有Delphi的一些优点。
Microsoft宣称:C#是开发.NET框架应用程序的最好语言。
二、Java与 C#要学习C#,不能不首先看一看Java语言。
相对于其他编程语音,Java有一个无庸置疑的优点:用户以及编译器第一次不必了解生成可执行代码的特定CPU细节。
Java引入了一个编译代码中间层,叫做字节代码,并使用一个虚拟抽象的机器,而不是一个真实的机器。
当Java 编译器结束了一个源文件的编译后,你所得到的不是可以立即在一个给定平台上运行的代码,而是可以在任何真实的平台上运行的字节代码,唯一的条件就是这个平台要理解和支持Java。
这些发展包含着一个文化的变革。
作为一个开发人员,你只需要确定Java虚拟机(JVM)提供的抽象层,不同的OS销售商负责执行代码层,从而将中立于平台的字节代码映射到主机平台的机构中。
在这种情况下,Java似乎是统一分布式计算机世界的领袖候选人了。
“编写一次,永远运行”(并且无论在哪里)一度成为Java诱人但却真实的口号。
那么为什么说Java只是“似乎”是一个好东西呢?跨平台理论的发展很好地证明了这一点。
我们看到,将Java代码从一个平台移植到另一个平台—Java这个语言最重要和最受吹捧的特点—并不象宣传的那样容易。
csharp 字符串执行方法-回复C# 字符串执行方法C# 是一种通用型、面向对象的编程语言,使用广泛于各种应用程序的开发中。
在C# 的开发过程中,字符串操作是非常重要的一部分。
C# 中有各种方法用于执行字符串操作,包括连接、替换、拆分和格式化等等。
本文将一步一步回答关于C# 字符串执行方法的问题。
问题1:C# 中如何创建字符串?在C# 中,可以使用两种方法创建字符串。
一种是使用双引号括起来的文本,例如:"Hello World!",另一种是使用String 类的构造函数来创建字符串对象,例如:string str = new string("Hello World!")。
这两种方法都可以创建字符串,选择哪一种取决于个人的偏好和需求。
问题2:C# 中如何连接字符串?在C# 中,可以使用+ 运算符来连接字符串。
例如,可以使用以下代码将两个字符串连接起来:string str1 = "Hello";string str2 = "World";string result = str1 + " " + str2;Console.WriteLine(result); 输出:Hello World除了使用+ 运算符,还可以使用String 类的Concat 方法来连接字符串。
例如,可以使用以下代码实现同样的功能:string str1 = "Hello";string str2 = "World";string result = String.Concat(str1, " ", str2);Console.WriteLine(result); 输出:Hello World问题3:C# 中如何替换字符串中的字符?在C# 中,可以使用Replace 方法来替换字符串中的字符。
C# 2005 简单操作小例子一、新建应用程序项目1、打开VS 2005后,文件》新建》项目》Visual C#》Windows应用程序,如下图所示。
例如:名称:WinApp_CX;2、建立一个工具菜单,在“工具栏”选“MenuStrip”点击一下Form1,依据需要建立菜单名称。
如下图。
3、菜单命名。
如“退出(E)”菜单,默认“退出EToolStripMenuItem”,我们进行重新命名,“Exit_ToolStripMenuItem”4、退出程序事件代码:在关闭程序时,提示信息,让用户确认是否退出程序。
我们在FromClosing 事件已经使用确认动作,因此,在“退出”菜单中的代码就不需再次使用确认,如果使用的话也可,只是经过两确认。
详细代码:private void Exit_ToolStripMenuItem_Click(object sender, EventArgs e){ // 退出程序// if (DialogResult.OK == MessageBox.Show("你确定要关闭应用程序吗?", "关闭提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)){Application.Exit();}}private void Form1_FormClosing(object sender, FormClosingEventArgs e){ // 退出程序// if (DialogResult.OK == MessageBox.Show("你确定要关闭应用程序吗?", "关闭提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question))if(MessageBox.Show("是否要退出本系统?", "关闭提示", MessageBoxButtons.YesNo, rmation) == DialogResult.Yes){Application.Exit();}}。
C#基础知识.NET/DOTNET:一般指.NET FRAMEWORK框架,一种平台,一种技术C#(sharp):一种编程语言,可以开发基于.NET平台的应用一个解决方案下面可以有多个项目,项目可以包含多个文件,文件中是我们写的程序在文件中,命名空间中可以包含类,类中可以包含方法,方法中是我们写的程序Main方法是我们程序的入口方法:当我们执行程序时候会首先找到Main方法,从Main方法的第一句程序开始执行,当Main方法执行完成后,程序结束。
.sln是解决方案的文件,今天写的第一句话:Console.WriteLine("你想写的内容!");第二句话:Console.ReadKey();当程序执行到Console.ReadKey();的时候,程序会停在这里,等待用户从键盘上输入一个键盘,用户输入这个键之后,程序才继续执行。
在C#中,每一句话都要一分号结束。
#region和#endregion可以折叠一段代码变量:代表着一块内存空间,我们可以通过变量名称向内存存取数据,有变量就不需要我们记忆复杂的内存地址。
在学习一句话Console.WriteLine()用于让用户从键盘上输入一句话,当程序执行到下面这句话,就会暂停,然后等待用户从键盘上输入一句话,按下回车继续执行。
如果想得到用户输入内容,就需要用户定义一个string类型的变量,写在下面这句话前面接收用户输入的内容。
转义字符是一个字符,可以赋值给例如char这样的类型;它有一个\+一个字母来组成具有特殊意义的一个字符;常用的转义字符有:\n换行 \b相当于backspace退格 \t tab由多个空格组成的一个字符,具有行与行之间的对齐功能,@字在字符串前面表示不转义,其都两种定义1)字符串中如果有\,则不在理解为转义符2)使字符串可以换行3)如果在字符串前面加上@符号,在字符串上用两个双引号代表一个双引号Decimal类型默认的无法转换成double类型注意:赋值运算符/算术运算符在进行运算时,要参与运算的操作数的类型必须相同,并且其运算结束也与操作数的类型相同。
csharp 控制台参数C#控制台:快速入门指南引言:C#是一种通用型、面向对象的编程语言,是微软的.NET平台的一部分。
C#可以用于开发各种类型的应用程序,包括控制台应用程序。
本文将介绍如何使用C#控制台来创建和运行一个简单的应用程序。
一、什么是C#控制台应用程序?C#控制台应用程序是一种基于文本界面的应用程序,它没有图形用户界面(GUI),只能通过命令行与用户进行交互。
控制台应用程序可以用于执行各种任务,例如处理数据、执行算法、生成报告等。
二、创建一个C#控制台应用程序1. 打开Visual Studio开发环境,选择“创建新项目”。
2. 在“新建项目”对话框中,选择“控制台应用程序”模板,并为项目命名。
3. 点击“确定”按钮,Visual Studio将自动生成一个控制台应用程序的初始代码。
三、控制台应用程序的结构一个典型的C#控制台应用程序由以下部分组成:1. 引用:用于引入其他类库或命名空间,以便在程序中使用外部功能。
2. 命名空间:用于组织和管理代码,避免命名冲突。
3. 类:包含了程序的逻辑和功能代码。
4. Main方法:是控制台应用程序的入口点,程序从这里开始执行。
四、编写第一个控制台应用程序下面是一个简单的示例,展示了如何在控制台中输出一条欢迎信息:```csharpusing System;namespace MyConsoleApp{class Program{static void Main(string[] args){Console.WriteLine("欢迎使用C#控制台应用程序!");Console.ReadKey();}}}```以上代码中,我们使用了Console.WriteLine方法来输出一条文本信息,然后使用Console.ReadKey方法来等待用户按下任意键,以保持控制台窗口的打开状态。
五、控制台应用程序的常用功能除了输出文本信息外,C#控制台应用程序还可以执行很多其他功能,例如:1. 接收用户输入:使用Console.ReadLine方法可以读取用户在控制台中输入的文本。
c#图像处理入门教程一.Bitmap类Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下:1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色.2. PixelFormat属性:返回图像的像素格式.3. Palette属性:获取和设置图像所使用的颜色调色板.4. Height Width属性:返回图像的高度和宽度.5. LockBits方法和UnlockBits方法:分别锁定和解锁系统内存中的位图像素.在基于像素点的图像处理方法中使用LockBits和UnlockBits是一个很好的方式,这两种方法可以使我们指定像素的范围来控制位图的任意一部分,从而消除了通过循环对位图的像素逐个进行处理,每调用LockBits之后都应该调用一次UnlockBits.二.BitmapData类BitmapData对象指定了位图的属性1. Height属性:被锁定位图的高度.2. Width属性:被锁定位图的高度.3. PixelFormat属性:数据的实际像素格式.4. Scan0属性:被锁定数组的首字节地址,如果整个图像被锁定,则是图像的第一个字节地址.5. Stride属性:步幅,也称为扫描宽度.如上图所示,数组的长度并不一定等于图像像素数组的长度,还有一部分未用区域,这涉及到位图的数据结构,系统要保证每行的字节数必须为4的倍数.三.Graphics类Graphics对象是GDI+的关键所在,许多对象都是由Graphics 类表示的,该类定义了绘制和填充图形对象的方法和属性,一个应用程序只要需要进行绘制或着色,它就必须使用Graphics对象. 四.Image类这个类提供了位图和元文件操作的函数.Image类被声明为abstract,也就是说Image类不能实例化对象,而只能做为一个基类1.FromFile方法:它根据输入的文件名产生一个Image对象,它有两种函数形式:public static Image FromFile(string filename);public static Image FromFile(string filename, bool useEmbeddedColorManagement);2.FromHBitmap方法:它从一个windows句柄处创建一个bitmap 对象,它也包括两种函数形式:public static bitmap fromhbitmap(intptr hbitmap);public static bitmap fromhbitmap(intptr hbitmap, intptr hpalette); 3. FromStream方法:从一个数据流中创建一个image对象,它包含三种函数形式:public static image fromstream(stream stream);public static image fromstream(stream stream, bool useembeddedcolormanagement);fromstream(stream stream, bool useembeddedcolormanagement, bool validateimagedata);有了上面的了解,我们便可以开始利用C#做图像处理,下面介绍几种方法:一. 打开、保存、显示图像privateBitmap srcBitmap = null;privateBitmap showBitmap = null;//打开文件privatevoid menuFileOpen_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = newOpenFileDialog();openFileDialog.Filter = @"Bitmap文件(*.bmp)|*.bmp|Jpeg 文件(*.jpg)|*.jpg|所有合适文件(*.bmp,*.jpg)|*.bmp;*.jpg";openFileDialog.FilterIndex = 3;openFileDialog.RestoreDirectory = true;if (DialogResult.OK == openFileDialog.ShowDialog()){srcBitmap = (Bitmap)Bitmap.FromFile(openFileDialog.FileName, false);showBitmap = srcBitmap;this.AutoScroll = true;this.AutoScrollMinSize =newSize((int)(showBitmap.Width), (int)(showBitmap.Height));this.Invalidate();}}//保存图像文件privatevoid menuFileSave_Click(object sender, EventArgs e){if (showBitmap != null){SaveFileDialog saveFileDialog = newSaveFileDialog(); saveFileDialog.Filter =@"Bitmap文件(*.bmp)|*.bmp|Jpeg文件(*.jpg)|*.jpg|所有合适文件(*.bmp,*.jpg)|*.bmp;*.jpg";saveFileDialog.FilterIndex = 3;saveFileDialog.RestoreDirectory = true;if (DialogResult.OK == saveFileDialog.ShowDialog()){ImageFormat format = ImageFormat.Jpeg;switch(Path.GetExtension(saveFileDialog.FileName).ToLower()){case".jpg":format = ImageFormat.Jpeg;break;case".bmp":format = ImageFormat.Bmp;break;default:MessageBox.Show(this, "Unsupported image format was specified", "Error",MessageBoxButtons.OK,MessageBoxIcon.Error);return;}try{showBitmap.Save(saveFileDialog.FileName,format ); }catch (Exception){MessageBox.Show(this, "Failed writing image file", "Error",MessageBoxButtons.OK, MessageBoxIcon.Error); }}}}c#中将bitmap或者image保存为清晰的gif在c#中默认可以讲bitmap保存为gif等格式,但是这种保存方法保存的gif会严重失真,正常情况下的代码:1 System.Drawing.Bitmap b = new System.Drawing.Bitmap(“c://original_image.gif“);2 System.Drawing.Image thmbnail =b.GetThumbnailImage(100,75,null,new IntPtr());3 thmbnail.Save(“c://thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);一个批量处理图片的软件,包括各种处理方式,处理效果,但是在保存为gif的时候出现了问题,在网上查了很久也没有发现一个可用的改善gif图片质量的方法,找到了一个解决办法,保存出来的gif容量大减,但是效果基本符合常规这中方法就是就是“Octree“算法。
使用C#格式化字符串如果你熟悉Microsoft Foundation Classes(MFC)的CString,Windows Template Libr ary(WTL)的CString或者Standard Template Library(STL)的字符串类,那么你对S tring.Format方法肯定很熟悉。
在C#中也经常使用这个方法来格式化字符串,比如下面这样:在我的机器上,可以得到下面的输出:item16sellsat¥3.57也许你的机器上的输出和这个不太一样。
这是正常的,本文稍后就会解释这个问题。
在我们日常使用中,更多的是使用Console.WriteLine方法来输出一个字符串。
其实String.Format和C onsole.WriteLine有很多共同点。
两个方法都有很多重载的格式并且采用无固定参数的对象数组作为最后一个参数。
下面的两个语句会产生同样的输出。
输出如下:Hello12345.67TrueQ45678Hello12345.67TrueQ456782 字符串格式String.Format和WriteLine都遵守同样的格式化规则。
格式化的格式如下:"{ N [, M ][: formatString ]}", arg1, ... argN,在这个格式中:1)N是从0开始的整数,表示要格式化的参数的个数2)M是一个可选的整数,表示格式化后的参数所占的宽度,如果M是负数,那么格式化后的值就是左对齐的,如果M是正数,那么格式化后的值是右对齐的3)formatString是另外一个可选的参数,表示格式代码argN表示要格式化的表达式,和N是对应的。
如果argN是空值,那么就用一个空字符串来代替。
如果没有formatString,那么就用参数N对应的ToStr ing方法来格式化。
下面的语句会产生同样的输出:输出是:123123123也可以通过String.Format得到同样的输出。