C#

十一月 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 »

六月 11, 2015

Unity 5.0 中使用C/C++开发的dll插件使用中的问题 DllNotFoundException 问题集

Unity 中会经常用到C/C++开发的动态库(dll),Unity称为第三方插件,或plugin,这是非常厉害的扩展方法,但是Unity使用dll也非常痛苦,错误百出。 最常见的问题是 DllNotFoundException,就是找不到动态库。导致DllNotFoundException的原因很多,现把一些可能的情况,以及其解决方案一一列举: 1、DllNotFoundException:[...]
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 »

七月 25, 2013

在C#中调试C++的DLL

“我的小伙伴们都惊呆了!” 今天才发现,其实C#是可以跟进C++代码的!!!在VS2012里的做法是: 在C#项目上右键点击,在右键菜单上选择“属性”[...]
Read More »

七月 21, 2013

四元数及其平滑处理

最近做camera 的 AI,需要对四元数,欧拉角等要有一定的了解,把前面学习的整理了一下: 1。四元数的优势  三维空间的旋转完全可以由4元数来胜任。传统意义上需要3×3矩阵来进行向量的旋转(4×4矩阵的第四列表示平移)。所以四元数更节省空间,运算速度更快。既然四元数能方便的表示3D旋转,那么对他们进行插值就能产生平滑的旋转效果。 劣势可能是比较抽象,不大好理解。而且据说顶点变换还是矩阵效率更高(涉及到平移)。 2。四元数的物理意义 Q([...]
Read More »

五月 10, 2013

C++通过Callback向C#传递数据

现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得。 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题。 从调用方式看也有两种情况: 1、C#调用C++函数 这种情况用的比较多,数据流向可以是C#流向C++,通过参数将数据传递给C++(如:SetData(double[][...]
Read More »

四月 12, 2013

C# import dll的P/Invoke调用在性能上的损失

    Net Framework提供了P/Invoke方式从托管代码中调用非托管的本地Dll,但是Micorsoft表示P/Invoke的性能并不是很好,远远达不到本地代码调用本地代码Dll的性能,所谓P/Invoke的性能不好并非是本地代码的执行效率问题,P/Invoke不会影响到非托管代码的执行,只是调用过程中的开销比较大,也就是说高密度频繁调用小量的高效率代码的代价可能会超过纯粹的托管代码,其效率损耗主要在托管类型与本地类型的相互转换上,以及非托管Dll的加载与释放上,所以使用P/Invoke非常适合足够规模一整块的高效率代码调用,而非频繁的小规模调用,小规模高密度频繁的P/Invoke调用往往在性能上得不偿失。 [...]
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 »

三月 2, 2012

C# byte[] 获取数组的IntPtr

有几种方法可以访问与字节数组相对应的 IntPtr。 第一种是使用不安全的代码块来访问直接指向字节数组的指针。 [code[...]
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 »

一月 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 »

五月 21, 2010

在CruiseControl.net 中用 devenv.com 自动生成 *.msi 安装文件

    利用CCNet(CruiseControl.Net)做打包文件时,碰到了一个问题,就是MSBuild没法编译Setup工程(*.vdproj),改用devenv.com配置,即可正常生成:   [...]
Read More »

Proudly powered by WordPress and Sweet Tech Theme