C语言基础入门,有哪些要点需要浅谈?
- 内容介绍
- 文章标签
- 相关推荐
本文共计720个文字,预计阅读时间需要3分钟。
目录:
一、导入外部DLL函数
二、结构体属性说明
三、导入外部DLL函数
四、使用示例:[DllImport(kernel32.dll)] 引入kernel32.dll库
五、kernel32.dll库简介
一、导入外部DLL函数
在C#中,可以通过DllImport属性来导入外部DLL函数。二、结构体属性说明结构体可以用来定义复杂的对象,并明确其属性。
三、导入外部DLL函数使用DllImport属性可以引入外部DLL函数。
四、使用示例:[DllImport(kernel32.dll)] 引入kernel32.dll库例如:[DllImport(kernel32.dll)]这是引入kernel32.dll库的方式。
五、kernel32.dll库简介kernel32.dll是一个动态链接库,包含了大量的Windows API函数。
目录
- 一、导入外部DLL函数
- 二、结构体时表明属性
一、导入外部DLL函数
如[DllImport(“kernel32.dll”)]这叫引入kernel32.dll这个动态连接库。这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数,就需要这么引入。举个例子:
[DllImport(“kernel32.dll”)] private static extern void FunName(arg,[arg]);
extern 作用:标识这个变量或者函数定义在其他文件 ,提示编译器遇到此变量的时,在其他模块里寻找,这里是在提供的动态库里找
示列代码:
using System; using System.Text; using System.Runtime.InteropServices; namespace Windows.Help { public partial class SystemInfo { [DllImport("kernel32")] public static extern void GetWindowsDirectory(StringBuilder WinDir, int count); [DllImport("kernel32")] public static extern void GetSystemDirectory(StringBuilder SysDir, int count); public static void Main () { const int nChars = 128; StringBuilder Buff = new StringBuilder(nChars); GetWindowsDirectory(Buff, nChars); String t = "Windows路径:" + Buff.ToString(); System.Console.WriteLine(t); } } }
二、结构体时表明属性
如[StructLayout(LayoutKind.Sequential) ]与[StructLayout(LayoutKind.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,也就是按成员的先后顺序排列.
2.Explicit,精确布局
需要用FieldOffset()设置每个成员的位置
这样就可以实现类似c的公用体的功能
[StructLayout(LayoutKind.Explicit)] struct S1 { [FieldOffset(0)] int a; [FieldOffset(0)] int b; }
这样a和b在内存中地址相同
到此这篇关于浅谈C#中[]的几种用法的文章就介绍到这了,更多相关C# []用法内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!
本文共计720个文字,预计阅读时间需要3分钟。
目录:
一、导入外部DLL函数
二、结构体属性说明
三、导入外部DLL函数
四、使用示例:[DllImport(kernel32.dll)] 引入kernel32.dll库
五、kernel32.dll库简介
一、导入外部DLL函数
在C#中,可以通过DllImport属性来导入外部DLL函数。二、结构体属性说明结构体可以用来定义复杂的对象,并明确其属性。
三、导入外部DLL函数使用DllImport属性可以引入外部DLL函数。
四、使用示例:[DllImport(kernel32.dll)] 引入kernel32.dll库例如:[DllImport(kernel32.dll)]这是引入kernel32.dll库的方式。
五、kernel32.dll库简介kernel32.dll是一个动态链接库,包含了大量的Windows API函数。
目录
- 一、导入外部DLL函数
- 二、结构体时表明属性
一、导入外部DLL函数
如[DllImport(“kernel32.dll”)]这叫引入kernel32.dll这个动态连接库。这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数,就需要这么引入。举个例子:
[DllImport(“kernel32.dll”)] private static extern void FunName(arg,[arg]);
extern 作用:标识这个变量或者函数定义在其他文件 ,提示编译器遇到此变量的时,在其他模块里寻找,这里是在提供的动态库里找
示列代码:
using System; using System.Text; using System.Runtime.InteropServices; namespace Windows.Help { public partial class SystemInfo { [DllImport("kernel32")] public static extern void GetWindowsDirectory(StringBuilder WinDir, int count); [DllImport("kernel32")] public static extern void GetSystemDirectory(StringBuilder SysDir, int count); public static void Main () { const int nChars = 128; StringBuilder Buff = new StringBuilder(nChars); GetWindowsDirectory(Buff, nChars); String t = "Windows路径:" + Buff.ToString(); System.Console.WriteLine(t); } } }
二、结构体时表明属性
如[StructLayout(LayoutKind.Sequential) ]与[StructLayout(LayoutKind.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,也就是按成员的先后顺序排列.
2.Explicit,精确布局
需要用FieldOffset()设置每个成员的位置
这样就可以实现类似c的公用体的功能
[StructLayout(LayoutKind.Explicit)] struct S1 { [FieldOffset(0)] int a; [FieldOffset(0)] int b; }
这样a和b在内存中地址相同
到此这篇关于浅谈C#中[]的几种用法的文章就介绍到这了,更多相关C# []用法内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

