最近的文章列表

char类型和string类型(C++,C#)
这一篇要讲一个非常重要的话题:char类型与string类型的区别。从字面上说,他们是有区别的1. char是字符类型2. string是字符串类型 虽然一字之差,但其本质是很大的。1. char属于基础类型(C++),在C#中它属于值类型(Value Type)。char类型的长度是固定的,上一篇讲到,在C++中它可能是1个字节,或者2个字节(取决于是否为Unicode Char),而在C#中,它永远是2个字节。2. string是一个模板类型,也就是一个class(C++)。在C#中它属于引用类型(Reference Type)。string的长度是无法明确取得的。也就是无法通过sizeof来取得,因为它不是一个基础类型,它本身并不固定长度,而取决于内部包含的字符。 说完了本质区别,我们
2011/3/25 Comments:
如何使用MarshalAs Unmanaged
UnmanagedType 枚举此 API 支持 .NET Framework 基础结构,不适合在代码中直接使用。指定如何将参数或字段封送到非托管代码。命名空间: System.Runtime.InteropServices程序集: mscorlib(在 mscorlib.dll 中)[ComVisibleAttribute(true)]public enum UnmanagedType成员名称说明Bool4 字节布尔值(true != 0、false = 0)。这是 Win32 BOOL 类型。I1 bool(true = 1、false = 0)。U11 字节无符号整数。I22 字节带符号整数。U22 字节无符号整数。I44 字节有符号整数。U44 字节无符号整数。I88 字节有符号
2011/3/25 Comments:
调试时出现若要调试此模块,请将其项目生成配置更改为“调试”模式
VS 2005调试时出现如下信息:Microsoft Visual Studio生成下面的模块时,启用了优化或没有调试信息:C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\0c2fc589\assembly\dl3\84a9ca8e\00e896d_956fc801\PriseLib.DLL若要调试此模块,请将其项目生成配置更改为调试模式。若要取消显示此消息,请禁用"启动时若没有用户代码则发出警告"调试器选项。解决法:第一步:把C:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\ 这
2011/3/24 Comments:
C#调用C/C++开发的dll方法
方法一:P/Invoke调用非托管代码的方法[DllImport("camnpr.dll")]static extern Int32 Jie(Int32 arg);方法二:LoadLibrary动态调用[DllImport("Kernel32")] publicstaticexternintGetProcAddress(inthandle,Stringfuncname); [DllImport("Kernel32")] publicstaticexternintLoadLibrary(Stringfuncname); [DllImport("Kernel32")] publicstaticexternintFre
2011/3/24 Comments:
C#关键字out和ref区别
ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。总结起来,他们有如下语法区别:1、ref传进去的参数必须在调用前初始化,out不必,即:int i;SomeMethod( ref i );//语法错误SomeMethod( out i );//通过2、ref传进去的参数在函数内部可以直接使用,而out不可:public void SomeMethod(ref int i){ int j=i;//通过 //...}public void SomeMethod(out int i){ int j=i;//语法错误}3、ref传进去的参数在函数内部可以不被修改,但out必须在离开
2011/3/24 Comments:
查看DLL函数的标识包_无法再Dll中找到名为的入口点
DLL 函数的标识包括以下元素: 函数的名称或序号 实现所在的 DLL 文件的名称 例如,如果指定 User32.dll 中的 MessageBox 函数,需要标识该函数 (MessageBox) 及其位置(User32.dll、User32 或 user32)。Microsoft Windows 应用程序编程接口 (Win32 API) 可以包含每个字符和字符串处理函数的两个版本:单字节字符 ANSI 版本和双字节字符 Unicode 版本。如果不进行指定,CharSet 字段所表示的字符集将默认为 ANSI。某些函数可以有两个以上的版本。 M
2011/3/24 Comments:
vs2005,vs2008,vs2010里怎么创建解决方案
到 工具里 点选项 选择项目和解决方案 把总是显示解决方案给勾上 在解决方案中添加项目 在你创建新网站的时候,在弹出页面下方,有个解决方案(S)的下拉框的,其中有创建新解决方案和添入解决方案两个选项的,选择后一个即可。。。
2011/3/22 Comments:
C#动态地调用Win32 DLL中导出的函数_C/C++和C#中的数据类型的对应表
关于这种C#中调用Win32 DLL中导出的函数的方法有很多种了,本文做个小结。大致有两种情况:编译时已知DLL文件名和函数名运行时才能获知DLL文件名(函数名)编译时已知DLL文件名这种情况下可以简单的使用Pinvoke机制,使用DllImport如:[System.Runtime.InteropServices.DllImport("kernel32.dll")]public static extern bool Beep(uint freq,uint time);运行时才能获知DLL文件名有两种解决方案:首先,可以想到使用Win32 API中LoadLibrary和GetProcAddress,象在C/C++中一样来动态调用DLL中函数,这里就不细说了;其次,考虑如
2011/3/22 Comments:
C# 调用 C/C++ DLL 教程一
直接从 C# 调用 DLL 导出若要声明一个方法使其具有来自 DLL 导出的实现,请执行下列操作:使用 C# 关键字 static 和 extern 声明方法。将 DllImport 属性附加到该方法。DllImport 属性允许您指定包含该方法的 DLL 的名称。通常的做法是用与导出的方法相同的名称命名 C# 方法,但也可以对 C# 方法使用不同的名称。还可以为方法的参数和返回值指定自定义封送处理信息,这将重写 .NET Framework 的默认封送处理。示例 1本示例显示如何使用 DllImport 属性通过调用 msvcrt.dll 中的 puts 输出消息。// PInvokeTest.csusing System;using System.Runtime.InteropServi
2011/3/22 Comments:
未能添加对""的应用。请确保此文件可访问并且是一个有效的程序集或COM组件
C#添加引用不成功,提示: 未能添加对HD.dll的引用。请确保此文件可访问并且是一个有效的程序集或COM组件我需要用到这个Dll文件中的接口函数 非.NET的dll需要DllImport。 C#添加引用需要这个dll本身是.net的程序集,或者是一个COM组件。如果是一个标准的C导出Dll,那么需要用DllImport导入函数,参考互操作内容实际调用类似于这样的代码 public class MPwdMngAPI { [DllImport("PwdMng.dll", CharSet = CharSet.Ansi, EntryPoint = "SetUserFirstLogin")] public extern static bool Rese
2011/3/22 Comments: