.Net

About .net framework, C#, WPF, and so on…

十一月 30, 2015

在Unity Android 程序中使用动态库及注意事项

很多C/C++代码以动态库的方式供第三方调用,在Unity中,这类文件(dll for windows, *.so file for Android/Linux, *.dylib for MAC OSX)叫插件。 在Unity开发的Android程序中使用动态库插件是非常方便的,曾经因为被误导而放弃使用unity,转而研究Android通过原生Java的JNI方式包装*.so文件,虽然还行,但是JNI晦涩丑陋的API实在看着不舒服。相对而言,C#也是可以直接包装*.so文件并在Android系统中直接调用的,而且Unity制作Android[...]
Read More »

十二月 10, 2014

Returning Strings from a C++ API to C#

从C++的dll中返回字符串是一种经常用到的C#调用C++函数的方式,但是带有返回值的调用一直是说不清道不明的问题,不细细研究,的确没法用起来。 这里直接给出一个正确的做法,后面会提供一份Google出来的资料,讲的非常好。原理知道了,对于返回结构体也应该是可以按同理搞定的。   Code[...]
Read More »

五月 9, 2014

How can I return a string from a C dll to C#?

// c code: #include <ole2.h> /* needed for CoTaskMemAlloc */ EXPORT char* getUrlFromBaseURLInList(char *ListFilePath, char *SrchBaseURL, char*[...]
Read More »

二月 22, 2013

C#调用C/C++动态库必须注意的几个问题

经常需要封装一些C/C++函数放入动态库中给C#程序调用,通常情况下直接写成如下形式即可: C#封装调用: [DllImport("depressor.dll")] private[...]
Read More »

十一月 2, 2012

C#中利用联合类型(union)做数值类型转换(byte[] to float)

在C/C++中,联合类型经常用来做数据类型转换,比如下面的联合类型可以直接将char数组转换成float类型: #include <iostream.h> #include[...]
Read More »

十二月 16, 2011

WPF中的Timer与DispatcherTimer的区别与应用

WPF / Silverlight中的 Timer 与 DispatcherTimer 有什么区别呢? 这里我给大家简单介绍一下他们在使用和实现上的区别。 在一个应用程序中,Timer会重复生成time事件,而DispatcherTimer是一个集成到了Dispatcher队列中的时钟,这可以使它被按照指定的时间间隔以指定的priority定期执行。 对于一个Timer时钟事件,系统并不能保证在时间间隔到达后被立即执行,但是能够确保在时间间隔到达之前不被执行。这是因为DispatcherTimer像其他操作一样被放置在了Dispatcher队列中。何时执行DispatcherTimer事件依赖于队列中的其他任务以及他们的优先级. 如果一个WPF应用程序使用了Timer时钟,那么它的事件必须在一个单独的时钟线程中运行,而不是在UI线程中,这对于WPF应用程序毫无用处——你没法在UI线程之外直接访问UI元素,而只能通过Invoke或者BeginInvoke将操作发送给Dispatcher 对象,委托Dispatcher去执行UI操作。 看到这里,你大概知道了为什么我们在WPF中应该用DispatcherTimer而不是Timer了:DispatcherTimer与Dispatcher运行于同一个线程中——UI线程,而且具有相同的DispatcherPriority优先级。 所以,在WPF/Silverlight应用中,正确的做法如下所示: [code[...]
Read More »

十月 14, 2011

C# Tostring() 格式大全 [转]

C   货币   2.5.ToString(“C”)   ¥2.50   D   十进制数   25.ToString(“D5”)   00025   E   科学型   25000.ToString(“E”)   2.500000E+005   F   固定点   25.ToString(“F2”)   25.00   G   常规   2.5.ToString(“G”)   2.5   N   数字   2500000.ToString(“N”)   2,500,000.00   X   十六进制   255.ToString(“X”)   FF   formatCode[...]
Read More »

十月 9, 2011

【原】实用的C#串口类CommPort,用于串口通信的源代码类

此CommPort串口类基于网上的mycomm修改,修复了一些bug、完善了事件处理机制,算是相当稳定实用了,不敢独享,贡献给大家想用。 使用注意事项: 1、几个属性的设置,用0、1、2、3等表示相应的选项; 2、port是数字,Open的时候自动串上“\\\\.\\COM”字符串; 3、加入了数据接收事件的触发,由于是从后台调用DataReceived回调函数,在接收和处理数据时可能不能访问UI元素(没试过,如果哪位碰到这个问题,自己加一下Invokee调用吧); 4、几个字段没有加正确性校验,别传错了; 5、读取数据时尽量用Read一次全部读出,然后做分解,而不是用ReadByte一次读一个字节,你想想,如果一块数据好几k,那么你用Read一次就读出来了,而ReadByte要读好几千次!性能马上就掉下来了; 6、低调的实现了startThread函数,你也会看到,如果要做的更好,线程启动时应该判断一下先前的线程是否退出; 7、你也应该看到,访问串口时没有加锁,安全的做法是,在读写串口时应该保证同时只有个读或者写,搞多线程的童鞋这里要注意一下; 8、跑的爽的时候想想我,出错的时候别骂我[...]
Read More »

四月 14, 2011

Thrift简介

Thrift是一个跨语言服务部署框架,最初由Facebook于2007年开发,后于2008年进入Apache孵化器(Apache Incubator)。 类似于SOAP,COM[...]
Read More »

四月 14, 2011

RPC 数据交换格式

RPC简称远程调用,说白了就是不同机器之间的交流通信,不同平台之间的交流通信,牵涉到机器间的交流通信,就要做到跟平台无关,不论是linux,windows也好都可以进行相互间的交流,跟语言无关,不论是C,C++,java等,都能够近可能多的表达出够准确的意思,也就是说,数据交换的格式定义在分布式数据通讯当中很重要,传统的xml,json都能满足上述的功能需求,而对于一个大型的分布式应用,定义一种高效,更少的传输数据量,更快的解释和生成速度满足系统间的调用需求,对资源的节省十分可观,由此各个公司纷纷推出各自内部进行数据通讯的rpc数据格式。 目前使用最多的莫过于xml和json,而且它们相应的支持的语言和平台更多是一种通用的标准,像soap,rest等都采用了xml进行数据通讯,而json常用作WEB程序客户端跟服务器端进行数据通讯的一种交换格式。目前很火热的莫过于Google[...]
Read More »

四月 11, 2011

使用Team Foundation Server(TFS)进行项目Bug管理

一、TFS的简单介绍 TFS中的BUG管理为开发人员提供了BUG查询,BUG回复,及BUG review的功能。 1. BUG查询 在团队资源管理器中,BUG是作为工作项来管理,和项目中任务,场景等统一编号。在工作项中有两种工作项的查询方式。团队查询是在TFS[...]
Read More »

四月 11, 2011

教程:VS2010 之TFS入门指南

[原文发表地址] Tutorial: Getting Started with TFS in VS2010 [原文发表时间] Wednesday, October 21, 2009 1:00 PM [本文转载地址] http://www.cnblogs.com/ewyb/archive/2010/09/27/1836458.html 本月初,我们发布了TFS新基础配置。该配置为建立支持源码管理,工作项和生成(builds)的TFS版本提供了便利。[...]
Read More »

一月 3, 2011

【转】典型开源3D引擎分类比较

  典型开源3D引擎分类比较   常见的3D引擎有:Unreal,Quake,Lithtech,OGRE,Nebula,Irrlicht,Truevision3D…等,其中开源免费的有:orge,irrlicht,fly3d,[...]
Read More »

十二月 17, 2010

VB.NET and C# 语法比较手册

  VB.NET and C# ComparisonThis is a quick reference guide to highlight some key syntactical differences between VB.NETand C#. Hope you find this[...]
Read More »

十月 4, 2010

C#中使用多線程訪問Winform問題

  我們在做winform應用的時候,大部分情況下都會碰到使用多線程控制界面上控件信息的問題。然而我們并不能用傳統方法來做這個問題,下面我將詳細的介紹。 首先來看傳統方法:   public[...]
Read More »

五月 12, 2010

【转】.NET中强名及其技巧

  如果你使用.NET作为开发工具很长时间了,你肯定回会碰到“强名”(strong name)这个概念。这个概念并不意味你的组件命名方式必须类似于MyCompany.Gorilla.Biceps的方式。强名的力量体现在对组件的保护方面,.NET[...]
Read More »

五月 10, 2010

C# 程序如何添加对 COM 组件的引用

1、注册控件      用 regsvr32 注册控件。注意,在Win7下必须以管理员身份启动cmd,然后才能正确注册控件。   [...]
Read More »

四月 29, 2010

使用WPF提供的数据验证机制

在用户通过WPF对话框窗口提供所需的数据时,对话框负责确保提供的数据有效,原因如下: 从安全角度讲,应验证所有输入。 从特定于域的角度讲,数据验证可防止该代码处理错误的数据,因为这样可能会引发异常。 从用户体验的角度讲,对话框可以通过向用户显示哪些输入数据无效来为用户提供帮助。 从性能角度讲,多层应用程序中的数据验证可以减少客户端和应用程序层之间的往返次数,尤其是在该应用程序由[...]
Read More »

三月 22, 2010

GetPixel截屏

作     者:周强 2009.05.02   /*************************************************************************** 函数名称:SaveToBmpFile*[...]
Read More »

三月 22, 2010

C#中三种截屏方式总结

[转载自:http://www.yqdown.com/chengxukaifa/CC/4012.htm] 昨天写自动化测试的CASE的时候,碰到一个疑难杂症,调用截图的函数去截取一个Popup窗口,但是总是把背景程序给截下来,Popup窗口就跟看不到一样。本来以为是同步的问题,也就是以为先截图再点击弹出Popup窗口了。后来加了N个Thread.Sleep来测试,发觉根本不是因为这个原由,而是截图的函数截不下来这个窗口。 这个为啥呢,只好把截图的函数代码翻出来看,以前是用这种方式的:BitBlt(dcImage,[...]
Read More »

Proudly powered by WordPress and Sweet Tech Theme