社区
VB基础类
帖子详情
我拿到一个SDK,中间是一个DLL文件,是C++版的,VB中如何调用
stealthbk
2004-02-26 04:25:51
我拿到一个SDK,中间是一个DLL文件,是C++版的,VB中如何调用
...全文
58
4
打赏
收藏
我拿到一个SDK,中间是一个DLL文件,是C++版的,VB中如何调用
我拿到一个SDK,中间是一个DLL文件,是C++版的,VB中如何调用
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
c#学习笔记.txt
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大
中
小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct identifier [:interfaces] body [;] 结构与类很相似,都表示可以包含数据成员和函数成员的数据结构。与类不同的是,结构是值类型并且不需要堆分配。结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用(该变量称为对象)。 struct 类型适合表示如点、矩形和颜色这样的轻量对象。尽管可能将
一个
点表示为类,但结构在某些方案
中
更有效。在一些情况下,结构的成本较低。例如,如果声明
一个
含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。结构可以声明构造函数,但它们必须带参数。声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构
中
初始化实例字段是错误的。在类
中
,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象,并且
调用
适当的构造函数。与类不同的是,结构的实例化可以不使用 new 运算符。如果不使用 new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。对于结构,不像类那样存在继承。
一个
结构不能从另
一个
结构或类继承,而且不能作为
一个
类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全一样。 [c ] 与 C 不同,无法使用 struct 关键字声明类。在 C#
中
,类与结构在语义上是不同的。结构是值类型,而类是引用类型。 2, 装箱和拆箱(取消装箱) 装箱是值类型到 object 类型或到该值类型所实现的任何接口类型的隐式转换。将
一个
值的值装箱会分配
一个
对象实例并将该值复制到新的对象
中
。关键字 object. 取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:检查对象实例,确保它是给定值类型的
一个
装箱值。将该值从实例复制到值类型变量
中
。 例: int i = 123; // A value type object box = i; // Boxing int j = (int)box; // Unboxing 装箱转换 取消装箱 3 , 隐式和显式 下列转换属于隐式转换:例:object o=i; 标识转换。 隐式数值转换。 隐式枚举转换。 隐式引用转换。 装箱转换。 隐式常数表达式转换。 用户定义的隐式转换。 下列转换属于显式转换: object 0=(object)i; 所有隐式转换。 显式数值转换。 显式枚举转换。 显式引用转换。 显式接口转换。 取消装箱转换。 用户定义的显式转换 4, delegate(委托) delegate void D(int x); class C{ public static void M1(int i) { /* ... */ } public static void M2(int i) { /* ... */ }} class{…….D cd1 = new D(C.M1);………….} 委托是
一个
数据结构,该数据结构引用
一个
静态方法,或引用
一个
对象实例和该对象的实例方法。在 C 或 C
中
与委托最接近的是函数指针,但函数指针只能引用静态函数,而委托可以同时引用静态方法和实例方法。在后一种情况
中
,委托不仅存储对方法入口点的引用,还存储对
调用
其方法的对象的引用。与 C 函数指针不同,委托是完全面对对象的;与指向成员函数的 C 指针不同,委托同时封装对象实例和方法。委托声明定义从类 System.Delegate 派生的类。委托实例封装
一个
或多个方法,每个方法都被称为可
调用
实体。对于实例方法,可
调用
实体由
一个
实例和该实例上的方法组成。对于静态方法,可
调用
实体仅由
一个
方法组成。给定委托实例和适当的参数集,便可以用该参数集
调用
此委托实例的所有方法。委托实例的
一个
有趣和有用的属性是它不了解或不关心它所封装的方法的类;真正重要的只是方法要与委托的类型兼容, 这使委托非常适合“匿名”
调用
。可选的形参表指定委托的参数,而返回类型则指示委托的返回类型。如果下面两个条件都为真,则方法和委托类型是兼容的:(兼容的概念就是可以用此声明的委托对方法进行委托). 1它们具有相同的参数数目,并且类型相同,顺序相同,参数修饰符也相同。 2它们的返回类型相同。 C#
中
的委托类型是名称等效的,而不是结构等效的。(但是请注意:两个不同但结构上等效的委托类型的实例可能会比较为相等),准确地说,两个具有相同参数列表、签名和返回类型的不同的委托类型被认为是不同的委托类型。委托实例所封装的方法集合称为
调用
列表。 5, interface(接口) [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
一个
接口定义
一个
协定。实现接口的类或结构必须遵守其协定。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法属性 索引器.
一个
接口可从
一个
或多个基接口继承。接口可由类实现。实现的接口的标识符出现在类的基列表
中
。被继承的接口称为该接口的显式基接口。当接口具有
一个
或多个显式基接口时,在该接口声明
中
,接口标识符后跟
一个
冒号以及由逗号分隔的基接口标识符列表。接口的基接口是显式基接口及其基接口。换言之,基接口集是显式基接口、它们的显式基接口(依此类推)的完全可传递的闭包。接口继承其基接口的所有成员。接口成员是通过 I.M 和 I[A] 形式的成员访问和索引访问表达式访问的,其
中
I 是接口类型的实例,M 是该接口类型的方法、属性或事件,A 是索引器参数列表。接口可以由类和结构实现。为了指示类或结构实现接口,在该类或结构的基类列表
中
包含了接口标识符。在实现类或结构
中
定位接口成员的实现的过程称为接口映射。 6,object object 类类型是所有其他类型的最终基类。C#
中
的每种类型都是直接或间接从 object 类类型派生的。可以把任何类型的数值给object类型. 7,string类型 string 类的实例表示 Unicode 字符串。尽管 string 是引用类型,但相等运算符(== 和 !=)被定义为比较 string 对象(而不是引用)的“值”(7.9.7 字符串相等运算符)。这使得对字符串相等性的测试更为直观。字符串为 string 类型并可写成两种形式,即用引号引起来和用 @ 引起来。用引号引起来的字符串括在双引号 (") 内, 并且可以包含包括换码序列在内的任何字符用 @ 引起来的字符串以 @ 开头,并用双引号引起来。用 @ 引起来的字符串以 @ 开头,并用双引号引起来。若要在
一个
用 @ 引起来的字符串
中
包括
一个
双引号,请使用两对双引号:@ 符号的另一种用法是使用碰巧成为 C# 关键字的被引用的 (/reference) 标识符。 8, 修饰符 修饰符作用 访问修饰符 public private internal protected 指定声明的类型和类型成员的可访问性。 访问不受限制 只有包含该类的成员的类可以访问 只有当前工程可以访问 只有包含该成员的类和继承的类可以访问 abstract指示某个类只能是其他类的基类。 const指定无法修改字段或局部变量的值。 event声明
一个
事件。 extern指示外部实现此方法。 override提供从基类继承的虚拟成员的新实现。 readonly声明
一个
字段,该字段只能赋值为该声明的一部分或者在同一类的构造函数
中
。 sealed指定类不能被继承。 static声明属于类型本身而不是属于特定对象的成员。 unsafe声明不安全的上下文。 virtual在派生类
中
声明其实现可由重写成员更改的方法或访问器。 volatile指示字段可由操作系统、硬件或并发执行的线程等在程序
中
进行修改。 9,语句 语句是程序指令。除非特别说明,语句都按顺序执行。C# 具有下列类别的语句。 类别C# 关键字 选择语句if, else, switch, case 迭代语句do, for, foreach, in, while 跳转语句break, continue, default, goto, return 异常处理语句throw, try-catch, try-finally Checked 和 Uncheckedchecked, unchecked fixed 语句Fixed lock 语句Lock (1) foreach 语句为数组或对象集合
中
的每个元素重复
一个
嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下: foreach (type identifier in expression) statement 若要循环访问集合,集合必须满足特定的要求。集合类型: 必须是 interface、class 或 struct。 必须包括返回类型的名为 GetEnumerator 的实例方法,例如 Enumerator(详见下文)。 Enumerator 类型(类或结构)必须包含:
一个
名为 Current 的属性,它返回 ItemType 或者可以转换为此类型的类型。属性访问器返回集合的当前元素。 ·
一个
名为 MoveNext 的 bool 方法,它递增项计数器并在集合
中
存在更多项时返回 true。 有三种使用集合的方法: 使用上述指导创建
一个
集合。此集合只能用于 C# 程序。 1. 使用上述指导创建
一个
一般集合,另外实现 IEnumerable 接口。此集合可用于其他语言(如 Visual Basic)。 2. 在集合类
中
使用
一个
预定义的集合。 (2) throw 语句用于发出在程序执行期间出现反常情况(异常)的信号。throw 语句的形式为: throw [expression]; expression :异常对象。当在 catch 子句
中
再次引发当前异常对象时,它被省略。 (3)try –catch语句 try-catch 语句由
一个
try 块和其后所跟的
一个
或多个 catch 子句(为不同的异常指定处理程序)构成。try-catch 语句采用下列形式之一: try try-block catch (exception-declaration-1) catch-block-1 catch (exception-declaration-2) catch-block-2 ... try try-block catch catch-block (4) fixed 防止变量被垃圾回收器重定位。 (5) lock lock 关键字将某个语句块标记为临界区。 6. 方法参数 如果为没有 ref 或 out 的方法声明
一个
参数,则此参数可以具有关联的值。可以在方法
中
更改该值,但当控制传递回
调用
过程时,不会保留更改的值。通过使用方法参数关键字,可以更改这种行为。如果没有ref,out则默认为值传递,虽然可以在方法
中
修改这个参数的值,但是修改后的值不会还会到
调用
该方法的程序
中
. params :params 关键字可以指定在参数数目可变处采用参数的方法参数 ref :引用传递 out : 7, namespace(名字空间) C#学习笔记(2)【大
中
小】【打印】【加入收藏】【关闭】 【收藏到新浪ViVi】【收藏到365KEY】 浏览字号:日期:2004-07-11 人气:8092 出处: write by cash(天下第七) 2002.01.20
版
权所有,翻录不究 cashcao@msn.com 选择 我身上携带着精神、信仰、灵魂 思想、欲望、怪癖、邪念、狐臭 它们寄生于我身体的家 我必须平等对待我的每一位客人 -----------伊沙:《原则》 我的名字是cash,所以我很功利主义; 我的星像是Leo,所以我很大男人主义; 我的语言是C#,所以我有点儿拿不定主义。 /* 你能看得出来,这不是一篇正规的技术文章,所以若你不小心从里边读到了
一个
爱情故事,可不要奇怪。有很多人用程序来表述爱情,在其
中
我能看到有Money,有Girl,有一些还涉及到Sex,但是我没有找到Love,我始终相信这世上有一种力量直接来自于爱情,到现在仍然相信。*/ C#(读作C sharp),是Microsoft公司新推出的(?)专为.NET设计的一门语言,号称“C/
C++
家族
中
第一种面向组件的语言”。很多人觉得它应该像C或者
C++
,但事实上它更像是java的
一个
clone,所以作为入门,读一下清华大学出
版
社出
版
的《Java 语言与面向对象程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识,没有也不要紧,我会在文
中
尽量列出相关的link,鉴于互联网瞬息万变的特点,若某一链接不可用,请自行至Google查询。 如前所述,我是
一个
狮子座男人,一度我认为学习Java会使我看起来与众不同,可是几个月以后我放弃了这个选择,我看了论坛里关于这两种语言孰优孰劣的讨论,最终选择了C#,请不要问我为何做出这样的选择,很多人认为
中
文是世界上最美丽的语言,可是华人世界以外有谁在讲汉语? 另外我发现论坛上学习Java的人都非常的有个性,当有人问起学习哪种语言更好时,他会打出几百个“JAVA”来,填满整个屏幕,也不说是为了什么。我觉得这样做未免有些太霸道了,如果你说这叫偏执狂我也不反对,虽然我是狮子座,可也不想被人这样看。 在C#刚刚推出的时候,大多数的程序员都不免吼上两句——不是因为高兴,而是因为又多了一种语言。他们觉得现在的语言太多了,没有必要再多出一种来添乱子。但是当他们看完C#的文档后又开始高兴起来,因为C#是如此简单:事实上,简单正是C#最大的特点。除此之外,它还具有现代、面向对象、类型安全、
版
本控制、兼容、灵活等特点。详细介绍请参阅rainbow(
一个
长着胡子的彩虹)翻译的<> ,前几章非常的有趣。 看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、
中
间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集
中
说Microsoft越来越不要脸也极为生气,因为相比之下,Sun也不怎么样,微软已经将C#提交设在日内瓦的ECMA(European Computer Manufacturers' Association,国际标准化机构欧洲电子计算机工业会)并获得批准。Sun就从来没有将它的Java交给过ECMA,以至于正当Microsoft尽力在Visual J++基础上拓展Java功能,并使之与Windows操作系统紧密结合在一起的时候,Sun公司对Microsoft提出了法律诉讼,控告Microsoft违反了许可证协议
中
的条款,最终的结果是Microsoft公司不得不停止其Visual J++产品的开发。(Microsoft后来在完全面向.NET框架的开发语言集
中
加入了Visual J#.NET,算是对Java语言用户的一种照顾。) 有人说,选择C#意味着选择MS(在
中
国的程序员当
中
,这并不是件值得自豪的事。如果你还不能理解这种心情,可以试想一下有人很认真地对你讲他喜欢听毛宁的歌)。事实上,通过ECMA标准的C#可以由任何人在任何平台上设计出它的开发程序。比如Ximian公司的Mono工程,可以使开发者能够编写同时在Windows和Linux上运行的.Net程序,这些程序甚至还可能在其它非Windows的操作系统上运行,比方Unix。这一段时间我正在Linux下试验这个工程,遗憾的是,还没有成功。 一位师兄对此种比较颇为不屑,他认为只要选一种语言去学就好了,“重要的是你要用它,并且做的比别人好。”这让我想起来一直都很喜欢的那个歌:把你自己该做的那份工作,做得比别人出色。年轻的时候我老是用这句话自勉…… 写到这里我发现这个故事还没有提到桐桐,这篇东西是为她而作。我早在十八个月以前就答应了她,我答应了她很多事,但还没有完成一件,现在我要一件一件的去实现。所以这个故事还应该有个更好的开始。 2000年6月我大学毕业,从北京回到了石家庄,到一家什么都做的公司上班(做
一个
网站),最开始制作界面,然后用asp编程,如果你用过asp就会知道,这是个很无聊的工种。在此之前我在一家报社实习,为他们的网站做设计和动画。在那里我认识了桐桐。 那时候她还在上学。 >>>未完,待续... C#学习笔记(3)【大
中
小】【打印】【加入收藏】【关闭】 【收藏到新浪ViVi】【收藏到365KEY】 浏览字号:日期:2004-07-11 人气:6938 出处: 开始 2000年6月我大学毕业,从北京回到了石家庄,正式开始了我的职业生涯。如前所述,一开始我使用的语言是asp,我一直认为这不能称之为编程,因为asp不是一种编程语言,把它叫做动态网页实现技术可能更好。另外,asp很简单,并且,简单就是它全部的特点--这使得它很容易就能学会(在后来的工作
中
,我接触到许多应聘的学生,他们都告诉我自己精通asp语言)。虽然学习起来很简单,但是在使用起来却不得不多费点儿劲儿:我还能记得自己晚上
一个
人在办公室用VI一步一步调试某
一个
网页的情景,每当遇到挫折失败的时候,总是想起给桐桐打
一个
电话,听听她的声音。如你所知,我总是遇到困难。 现在你能看出来,我不是高手,只是
一个
低手... 2000年6月我大学毕业,从北京回到了石家庄,同一时间(美国西部时间6月22日上午),微软公司在位于美国西雅图郊外的总部内邀请新闻记者、新闻分析家等约400人,举行了新闻发布会“Forum2000”,宣布正式推出.Net计划。这个计划
中
包括了新的网络计算平台(.Net Framework)、新的语言(C#)、新的开发工具(Visual Studio.Net)以及asp的下
一个
版
本ASP.NET,后者最开始被称为ASP+。那时候我学习的主要兴趣就在ASP.NET上,并且通过这个窗口开始了解Microsoft.Net的各个方面。 ASP.NET仍然不能称之为一种编程语言,但是现在可以把它看作是
一个
创建、管理、部署Web应用程序的平台。可以使用任何.Net语言在这个平台上开发互联网应用程序,这其
中
当然包括C#。它们之间的关系可以从下图
中
看出: 这就是著名的.Net 平台结构图,从这个图上可以看到,ASP.NET、Windows Forms和VS.Net都不过是.Net开发平台的一部分,用于.Net应用程序的开发及展示。.Net 平台的核心技术为:通用语言运行时(CLR:Common Language Runtime)、基类库(Base Class Library)、.Net语言及Visual Studio.Net。 从这个图上也可以看出,.Net Framework是架构在Windows平台上的
一个
虚拟的运行平台,你可以想象将最下层的Windows换作其它的操作系统,比如说Linux,一样可以实现使用符合了CLS(Common Language Specification,通用语言规范)的.Net语言(
VB
.Net、C#、JScript.Net等)来创建ASP.NET或Windows Forms(可能会叫做Linux Forms)应用程序的功能,这其实就是我们前面介绍的Mono计划所要实现的功能。所以可以这么认为,理论上,C#是一种可以跨平台的语言,这很像Java,另
一个
比较像Java的地方是,C#也是一种(特殊意义上的)解释性的语言。同Java一样,C#编写的程序代码也是先通过C#编译器编译为一种特殊的字节代码(
中
间语言,Microsoft Intermediate Language,MSIL),运行的时候再经由特定的编译器(JIT编译器,Just In Time,JITer)编译为机器代码以供操作系统执行。 不仅是C#语言,所有.Net语言(将会包括我们常用的几十种现代的编程语言)都可以编写面向CLR的程序代码,这种代码在.Net
中
被称为托管代码(Managed Code),所有的Managed Code都直接运行在CLR上,具有与平台无关的特性。 解释性的语言很安全,并且可以通过它的运行平台为其赋予更多的功能,比如自动内存管理、异常处理等。事实上,C#语言的许多特点都是由CLR提供的,下面的CLR结构图说明了这一点。 可以看到,类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM Marshaler)、多线程支持(Thread Support)这些C#的特点都是由CLR来提供的。CLR最早被称为下一代Windows服务运行时(NGWS Runtime),是直接建立在操作系统层上的
一个
虚拟的运行环境,主要的功能是管理代码的运行。在.Net 平台结构图
中
,CLR的上面是.Net的基类库(Base Class Library,BCL),这组基类库包括了从基本输入输出到数据访问等各方面,提供了
一个
统一的面向对象的、层次化的、可扩展的编程接口。从.Net 平台结构图
中
也可以看到,基类库可以被各种语言
调用
和扩展,也就是说,不管是C#、
VB
.NET还是V
C++
.NET,都可以自由地
调用
.Net的基类库。事实上, C#并没有属于自己的类库,它所使用的编程接口就是.Net提供的基类库。所以,在决定使用C#时,真正需要费工夫学习的其实是.NET框架的基类库:C#自身只有区区77个关键词,而且其语法对许多程序员来说都是他们非常熟悉的。BCL则相反,它包含了超过4500个以上的类和无数的方法、属性,在你的C# 程序
中
随时都可能会用到它来完成自己的任务。 很多人都思考过应如何开始学习一种新的语言,对于
一个
有经验的编程人员来讲,这确非难事。但是对于
一个
对编写代码一无所知的人而言,如果你是以C#开始你的编程之旅的,数目繁多的概念及新名词可能会令你有些不知所措。这时候请注意你的学习顺序,任何一种编程语言的学习都是按照运行平台、语法、基类库直至各方面的应用这一顺序来进行的,但是在实际的学习
中
,它们之间并不是孤立的。推荐的方法是:对运行平台和语法有了
一个
整体的认识后,在应用
中
学习各种基类库的用法。鉴于C#这一语言的特殊性,全面了解它的运行平台(.Net Framework)必会使你的学习事半功倍。所以请记住上面提到的两个图,在以后的学习
中
,虽然可能不会明确的涉及到它们,但是在整个C#的学习过程
中
,它们却是无处不在的。 还有
一个
很重要的概念需要你明白,这就是公共语言架构(Common Language Infrastructure ,CLI)。CLI是CLR的
一个
子集,也就是.NET
中
最终对编译成MSIL代码的应用程序的运行环境进行管理的那一部分。在CLR结构图
中
CLI位于下半部分,主要包括类加载器(Class Loader)、实时编译器(IL To Native Compilers)和
一个
运行时环境的垃圾收集器(Garbage Collector)。CLI是.Net和CLR的灵魂,CLI为IL代码提供运行的环境,你可以将使用任何语言编写的代码通过其特定的编译器转换为MSIL代码之后运行其上,甚至还可以自己写MSIL代码在CLI上面运行。如你所知,欧洲计算机制造商协会(ECMA)已经于2001年10月13日批准C#语言规范(ECMA-334)成为一种新诞生的计算机产业标准。同时国际标准组织ISO也同意该标准进入该组织的审批阶段。并且,作为.Net与CLR的核心部分,CLI与C#也同时获得了ECMA的批准(ECMA-335)。拥有了C#与CLI这两项标准,你可以自己写出能够运行于任何操作系统上的.Net平台(只要你愿意)。如前所述,著名的Mono项目就是这么干的,Mono项目包括三个核心的部分:
一个
C#语言的编译器,
一个
CLI和
一个
类库。在Java的世界
中
,这项工作是由SUN公司完成的,SUN针对不同的操作系统开发出相应的Java虚拟机以便让
一个
由Java开发的应用程序运行在不同的操作系统上,但是迄今为止还没听说过微软有这方面打算(为用户提供非Windows系统的.Net平台)。 2000年的6月还有很多事情发生,2000年的6月我在学校做毕设,晚上就跑到系试验室看欧锦赛,我很喜欢的坎普君(Bergkamp)大放异彩,帮助荷兰队6比1大胜南斯拉夫,米哈伊洛维奇 (Mihajlovic)在比赛最后莫名的笑容永远留在了我的心
中
。说实话,那时候只顾着看EURO2000,可没管什么.Net、.Not。另外,离别的愁绪围绕在每个人的周围,广播里开始反反复复播放一些古老的歌曲,不知道为什么,恋曲1980却是那时候的最爱。 后来,我们都毕了业。如你所知,我离开了北京。 >>>未完,待续... C#学习笔记(4)【大
中
小】【打印】【加入收藏】【关闭】 【收藏到新浪ViVi】【收藏到365KEY】 浏览字号:日期:2004-07-11 人气:8360 出处: 约定 //
一个
典型的用C#写就的HelloWorld程序 using System; class HelloWorld { public static void Main() { Console.WriteLine("Hello World !"); } } 我忘记自己第一次用C#向世界问好是在什么时候了,不过可以肯定我已经打过招呼了,那时候用的是beta1
版
。现在你可以到http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml去下载.Net Framework Software Development Kit (
SDK
)的正式
版
,其
中
包括了前面提到的.NET Framework, 以及书写、编译、测试、开发 .NET Framework 应用程序所需要的一切——文档、例子、命令行工具和编译器。安装之后就可以开发和运行C#程序了,不过一般的建议是:一定要看.Net Framework
SDK
中
所带的文档与例子,如果能照着例子再写一遍那就再好不过了。 当我第一次看到C#代码的时候,同样认为它很像Java,
一个
形象的比喻是:C#和Java是一对双胞胎,从语法的角度来讲,它们共同的父亲当然非
C++
莫属(请注意,不是V
C++
)。对于
一个
学过Java语言的人来说(比如说在下),要理解这段代码实在是太容易了:第一行当然是注释了,C#支持两种注释方法,以"//"开始的单行注释和以"/*"、"*/"配对使用的多行注释。第二行(using System)导入了System这个包(在C#
中
被称之为名字空间,Namespace),可以让我们方便的
调用
Microsoft.Net基类库System
中
的所有类,在此例
中
使用了System名字空间
中
的"Console"类,用于在控制台窗口输出程序运行结果。如前所述,C#并没有内置的输入输出语句,所有需实现的功能都完全来自于.Net基类库。这一句的作用就是告诉编译器去哪里寻找Console类以便
调用
。 接下来声明了
一个
类HelloWorld,这个类
中
有
一个
特殊的方法Main(),每个可执行
文件
都需要有
一个
入口点,在C#
中
,这个入口点就是Main()方法,此方法将在程序启动时被
调用
。在这个方法
中
,Console是在命名空间System下的
一个
类,它表示的是控制台。这里
调用
其静态方法WriteLine()。如同
C++
一样,静态方法允许我们直接作用于类而非实例对象。WriteLine()函数接受字符串类型的参数"Hello World !",并把它送入控制台显示。如前所述,C#没有自己的类库,它直接获取Microsoft.NET系统类库。在这里正是通过获取Microsoft.NET系统类库
中
的System.Console.WriteLine()来完成我们想要的控制台输出操作。现在使用记事本来编写这段代码,并将它的
文件
名保存为HelloWorld.cs,其
中
".cs"是C#源代码
文件
的扩展名。然后在配置好C#编译器的命令行环境里键入"csc HelloWorld.cs"编译
文件
。可以看到编译输出
文件
HelloWorld.exe。键入HelloWorld执行这个
文件
可得到下面的输出: Hello World ! 这就是第
一个
C#的程序,我们使用csc.exe来编译它,对于这个C#编译器,有如下说明: 1. 它是随.Net Framework
SDK
免费发布的,可以在DOS命令行被
调用
2. 它的使用方法如下: csc SourceFile.cs /out:TargetFile.exe 如果不使用输出参数指定目标
文件
名,则默认输出为源
文件
名 3. 一般情况下,它在系统
文件
夹(Windows或WinNT)下的Microsoft.NET\Framework\v1.0.3705
文件
夹内 4. 如果你安装了VS.Net,从Visual Studio.NET Tools项目组
中
可以激活Visual Studio.NET Command Prompt窗口,这是
一个
配置好C#编译器的命令行环境 5. 使用csc.exe编译后的C#程序并不是机器代码(尽管拥有.exe的后缀名)。如前所述,C#程序只是被编译成了MSIL代码。 C#编译器(csc.exe)编译后的
文件
并不是
一个
严格意义上的可执行
文件
(并不包含机器代码),而是
一个
PE(portable executable)格式的
文件
,虽然它同样拥有.exe的后缀名。在这个PE
文件
中
也不仅仅只包含
中
间语言,在其
中
还包含有元数据(Metadata)和
一个
由编译器添加的目标平台的标准可执行
文件
头。
中
间语言,确切地说,应该称为微软
中
间语言(Microsoft Intermediate Language,MSIL),是由微软定义的一种界于源代码与机器码之间的一种语言。在CLR
中
,它首先会由特定的语言编译器将其包装成exe格式的伪代码(P代码)。再由特定的编译器将其转换为本地代码执行。对于微软
中
间语言,
一个
形象的比喻是:如果CLR是操作系统的话,那么微软
中
间语言就是.Net平台上的ASM汇编语言。它比大多数 CPU 机器语言更为高级,比如它可以理解对象类型,并具有创建和初始化对象、
调用
关于对象的虚拟方法以及直接操作处理数组元素的指令。它甚至还具有发现和捕获异常情况用于错误处理的指令。 元数据(Metadata)和MSIL共同存在于编译好的程序
文件
之
中
,描述了此程序包含的类型的定义、各种类型的签名及其它一些数据,相当于以前的类型库(Type Library),同时也记载了此程序所引用到的其它外部类。元数据的主要作用是将与代码有关的更多的信息提供给CLR。基本上,元数据用于如下各项任务:用于表示CLR用途的信息,如定位和装载类、内存
中
这些类的实例、解决
调用
、翻译IL为原始码、加强安全并设置运行时上下文边界。
一个
由C#语言写就的源码
文件
在CLR环境
中
执行的过程是这样的:首先由C#编译器编译成包含了
中
间语言和元数据的PE
文件
,当我们在系统
中
调用
这个
文件
时,CLR会启动
一个
编译器再将这个PE
文件
包含的MSIL代码转换成为托管的本地代码。转换MSIL代码为本地码的这个编译器就叫做JIT编译器(Just In Time,JITer)。请注意它并不是前面我们用到的C#编译器。 现在让我们看看JIT编译器是如何工作的:当PE
文件
被
调用
时,JIE编译器将其分解为MSIL和元数据,这时候MSIL并不直接让.Net去
调用
本地的系统接口,而是指定.Net系统去编译连接那些需要的CLR
DLL
,编译出百分之百的本地代码。整个的过程如下: 当
一个
类型被装载时,装载器创建
一个
存根(stub),并使它与类型的每
一个
方法相连接。当
一个
方法第一次被
调用
时,存根把控制交给JITer。JITer把MSIL编译为本地代码,并且把存根指针指向缓冲本地代码。已经被JITer编译的方法随后就直接
调用
已经产生的本地代码,减少了JITer编译和执行代码的时间。可以看到,JITer并不会一次性的将所有的MSIL都编译为本地代码,而是在我们需要时才即时编译,也就是说,有些代码可能从来都没有被编译过。很明显这样做的好处是既保证了运行期的安全性,又不会损失太多的效率。 这就是
一个
C#程序执行时的步骤。整个过程是这样的: 1) 由C#编译器将源代码编译为
中
间语言 2) 装入托管代码,这包括解决内存
中
的名字、表层类(laying out classes ),并且创建JIT编译所必需的存根。通过执行经常性校验,包括加强一些访问规则,类装载器同样也增强了安全性 3) 用JITer将 IL转换成原始代码 4) 装入元数据、校验类型安全和方法的完整性 5) 垃圾收集(GC)和异常处理 6) 描绘和查错服务 7) 管理线程和上下文以及远程管理。 不必全部理解这些概念,在以后的学习
中
将会一一的体会到它们的精彩,现在你需要做的(如果你还没这么干过的话),是找到ildasm.exe这个
文件
(一般情况下,它会和csc.exe在同一
文件
夹
中
)。顾名思义,这是
一个
MSIL的反汇编程序(.Net Framework IL Disassembler),在命令行窗口下输入ildasm helloworld.exe /out=helloworld.il就会得到两个
文件
:helloworld.il和helloworld.res。前者包括了反编译出来的元数据和MSIL代码,后者则是提取的资源
文件
。用记事本打开helloworld.il
文件
,可以看到它定义并实现了
一个
继承自System.Object 的HelloWorld类及两个函数:Main()和.ctor()。其
中
.ctor()是HelloWorld类的构造函数。在这个
文件
中
还包括元数据和其它有关的信息。如果你觉得这样不够直观的话,可以在命令行窗口键入ildasm helloworld.exe,这样就可以启动ILDASM 窗口并向我们展示出反编译后的helloworld.exe
文件
。 请仔细将这些代码看上几遍,现在理解全部这些内容并不重要,但是希望你也能看一下
文件
中
的元数据,这其
中
包含所有 Runtime 和编译器需要的有关程序集及其模块、类型和成员(如方法)的信息。 行文至此,我想谈一下学习。如你所知,在我们所处的环境
中
,学习总意味着是
一个
痛苦的过程,学习一种新知识好像总是为了自己的某种需求,我并不认为这样有什么不对,但我总觉着,除了
拿到
高薪和受人尊敬外,学习还应该带给我们更多的快乐。有些知识我们现在也许用不着,比如前面谈到的一些内容,但是我们了解了,就是一件值得高兴的事。 智慧本身就是好的,有一天我们都会死去,追求智慧的道路还会有人在走着。死掉以后的事我看不到。但在我活着的时候,想到这件事,心里就高兴。 ——王小波 今天是2002年4月7号,再过三天就是王小波的忌日了,不知道有多少人还会记得这个日子,还会记得这个人。本文的最后,我向大家推荐小波的作品——每
一个
心智成熟的人都应该读一读小波的文字。在他的杂文随笔集《沉默的大多数》
中
有一句话谈到了他作为程序员的一面: “今晚不把这段C++调通,老子就不睡了!” >>>未完,待续...
短信猫:又称GSM MODEM,GSM猫,无线猫,短信模块,GSM模块
短信猫:又称GSM MODEM,GSM猫,无线猫,短信模块,GSM模块,短信设备。根据集成模块的个数不同,又分为单猫和猫池两种。 短信猫是什么?短信猫其实是一种支持GSM无线通讯的工业级调制解调器,一般基于法国WAVECOM或德国SIEMENS(西门子)GSM模块,插入国内移动通信运营商的SIM卡后即可接入运营商GSM网络,实现无线GSM通话、短信、数据等功能。与手机相比,实际上核心模块一致,只是手机多了屏幕、键盘以及软件界面支持,而短信猫是在PC上通过串口通讯用AT指令去控制的,但两者能完成的短信收发功能是完全相同的。 随着手机及短信的普及,越来越多的行业开始发展企业短信应用,短信猫设备凭借其低成本、稳定可靠的点对点通信、方便快捷接入的优势已经成为企业短信领域重要的短信接入方式之一。
中
德福林依托其强大的研发实力、多年的无线通信经验,推出了一系列短信猫产品,除了原装正
版
的WAVECOM GSM MODEM,自身更是研发了多种型号的短信猫设备,基本上基于WAVECOM核心模块,接口包括串口(RS232)、USB接口、PCI接口、网口等,并提供一系列短信猫开发包及示例程序,支持VC/V
C++
/
VB
/DELPHI/PB/C#/.NET/ASP/JAVA/JSP二次开发。 短信猫设备二次开发接口 基于短信猫开发行业短信应用,软件开发商可以采取以下三种方式: 直接使用AT指令:基于串口通讯模式使用AT指令直接操作短信猫,这是最底层的短信猫开发模式,但是我们建议客户尽量不采用此方法,因为这种方式需要对短信猫的AT指令及特性非常熟悉。 短信猫二次开发包:短信猫厂商针对软件开发商短信应用提供的二次开发包,其底层是基于短信猫的AT指令,对于软件开发商只需要
调用
二次开发包或者控件
中
的API即可。基于多年的开发经验,为客户提供一套基于动态链接库(
DLL
)技术的短信猫开发包,可以支持所有的 WINDOWS 环境下开发工具,也提供支持 JAVA 开发的 JAR 包。 短信猫通信
中
间件:这是我们独家提供的基于数据库接口的短信猫通信服务器软件,软件开发商只需要提交短信队列到数据库里即可,开发简单快速,节约人力成本,是最佳的短信应用开发接口模式。 短信猫的优势 基于短信猫建立行业短信应用,具有如下优势: 投入低:无需购置接入服务器,只需购置经济的短信猫设备; 安装维护方便:短信猫设备容易安装,维护手段简便易用; 安全性好:服务采用自服方式,不需经第三方,信息保密,整个应用都在企业的控制之内; 用户覆盖面广:该服务能通过不同运营商的短信
中
心发送或接收短信息,兼容移动、联通的所有手机用户以及电信、网通的所有小灵通用户; 可靠性高:采用点对点的发送方式,优先级别高,稳定性好; 系统容量可扩展:通过简单添加通信模块就可以扩充系统容量; 业务开展自由:业务内容不受运营商限制,可以根据企业的具体需求进行业务和应用的定制; 接入门槛低:无需和运营商、服务提供商进行繁琐的商务谈判,只需一台短信猫就可以迅速构建企业自己的短信服务系统。 短 信 猫 直 销 网 产 品 简 介 欢迎由此查看本网短信猫产品规范及技术指标 短信猫,一般也叫做GSM MODEM,从英文名翻译过来,其实就是支持GSM制式通讯的调制解调器。所以,短信猫还有很多别称,如GSM猫,无线猫,短信模块,GSM短信模块等。因为大部分客户都是拿着GSM MODEM去收发短信,也就是在行业应用市场上,GSM MODEM最大的用途是用来收发短信,因此,大多数人还是称之为短信猫。 短信猫是什么?短信猫其实是一种支持GSM无线通讯的工业级调制解调器,一般基于法国WAVECOM或德国SIEMENS(西门子)GSM模块,插入国内移动通信运营商的SIM卡后即可接入运营商GSM网络,实现无线GSM通话、短信、数据等功能。 短信猫(GSM MODEM)的核心模块实际上就是手机的核心模块。当短信猫接通电源以后,GSM MODEM的内置软件就开始工作,如果您插入了某个移动运营商的SIM卡,GSM MODEM便完全就和手机一样接入到移动通信网络
中
去了。与此同时,计算机可以通过串口或USB连接GSM MODEM,通过一套AT指令,便可以操作GSM MODEM,例如收发短信。其实也可以拨打电话、收发传真等等,只是我们一般没有必要使用这些多余功能。因此短信猫(GSM MODEM)与手机的最大区别在于手机自带屏幕、键盘、应用软件,而短信猫相当于
一个
处于黑箱操作的手机,需要计算机去驱动和控制。 短信猫(GSM MODEM)的分类:按照与计算机的不同接口,短信猫可分为串口短信猫、USB接口短信猫、PCI接口短信猫、网口短信猫等。按照模块数的多少,短信猫可分为单口短信猫和短信猫池两种。短信猫池其实就是将多个模块集成到一起通过多串口或者网口与计算机形成多串口通讯,从而实现多个模块并发的设备。按照无线网络制式的不同,又可分为GSM短信猫、CDMA短信猫和小灵通短信猫。 短信猫开发接口(GSM MODEM
SDK
),基于短信猫开发行业短信应用,软件开发商可以采取以下四种方式:1、直接使用AT指令,基于串口通讯模式使用AT指令直接操作短信猫,这是最底层的短信猫开发模式,基本上无论是哪种接口的短信猫,其实质还是通过GSM MODEM的串口通讯AT指令来驱动的。2、短信猫开发包:短信猫厂商针对软件开发商短信应用提供的二次开发包,其底层是基于短信猫的AT指令,对于软件开发商只需要
调用
二次开发包或者控件
中
的API即可。3、短信猫通信
中
间件:这是一套的基于数据库接口的短信猫通信软件,用户只需提交短信队列到数据库即可进行短信收发。因此无论您用的是哪种开发语言,只要您能读写数据库即可。这种开发简单快速,节约人力成本,是最快捷的一种短信应用开发模式。4、直接使用由第三方提供的短信网关:这时其实已经没有必要再购买短信猫了(因为短信网关公司已经替您配备了类似设备),用户只需按照网关说明直接
调用
短信网关接口,系统就会自动实现短信收发。短信网关公司的网址为:SmsGate.CN。
C# Oracle VFP
调用
dll
使用C#时不免用
调用
别的
DLL
,如WIN32的API和自己以前做的
DLL
, C#
调用
DLL
很像
VB
,下面讨论的C#
调用
DLL
的方式。 看看下面的例子,演示了怎么定义
DLL
函数接口 public class Utility { [
Dll
Import("kernel32", EntryPoint=”CreateDirectory”, CallingConvention=CallingCon
SDK
入门
SDK
入门 以下内容是鄙人在今天学
SDK
的过程
中
,下载过的一片未曾谋面的大神的文章,觉得写的甚是好啊,让我这个长得很黑的小白不禁惊喜,这里就像远方的好人拜谢啦(鞠躬!!!)。不管怎么说,我都觉得好的东西应该拿出来大家一块分享,看这篇文档的时候,我目前是实在不敢在正文乱改
一个
字,
一个
是因为自己的水平太次,另
一个
是人家写的太专业,生怕改动会破坏它原本的准确性。(不过我打算以后要拿出来按照自己的理解和
[相机开发] V
C++
联合相机
SDK
开发
SDK
的英文全名是:software development kit,翻译成
中
文的意思就是“软件开发工具包”通俗一点说 就是第三服务商提供的实现软件产品某项功能的开发包。里面就是动态链接库,里面留下的一些函数,供开发者在不同工程环境下(例如VC、
VB
、C#等)进行函数的
调用
采集,方便开发。 ...
VB基础类
7,789
社区成员
197,583
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章