最近的文章列表

C# byte word 变量负值的ToString转换
最近抽空写个C#应用FOCAS1函数的FANUC 18M通过TCP/IP读取机床参数的功能,结果发现读到的负值用简单的 byte.ToString()和word.ToString()方法得不到正确的负值,经过多次改写代码和测试,实现byte word 变量负值的ToString准确转换的代码如下:if (paramater_type == 1) //byte{ if (sign == 1) //变量符号标志1为无符号数据 { mystring = ((ushort)byte).ToString(); } else { mystring = ((byte & 128) != 0) ? (byte - 255 - 1) : byt
2011/3/31 Comments:
C# byte数组转换成字符串
byte数组转换成字符串String s = System.Text.Encoding.Default.GetString(byte[] content,int start,int end) 如果是web传输,两端必须匹配! System.Text.Encoding.Default.GetString(byte[]) 对于简体中文版,相当于System.Text.Encoding.GetEncoding( "GB2313 ").GetString(byte[])
2011/3/30 Comments:
c#(c++/c DLL)尝试读取或写入受保护的内存,这通常指示其他内存已损坏
C#调用非托管DLL中的API: LONG APIENTRY devwdm_GetImageBuffer(BYTE *pImageMem); 函数功能: 采集一帧RGB24图像到内存 pImageMem: 图像缓冲区指针C#调用: C# code[DllImport("devwdm.dll")]public static extern int devwdm_GetImageBuffer(IntPtr pImageMem);于是报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。求助于大家,根据大家的意见,把API中的 BYTE* 转换到C#中,分别用 byte[] 、IntPtr 、ref byte[]、 ...甚至用unsafe了,可是还是报错,有人说内存不
2011/3/29 Comments:
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: