自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(657)
  • 资源 (3)
  • 收藏
  • 关注

原创 std::exception vs java.lang.Exception

我们知道std::exception 和 java.lang.Exception分别是C++和Java语言的大部分异常类型的基类。如果我们要定义一个自己的异常类型,一般会以这两个类做基类来写自己的类代码。这是我在写C++和Java代码的时的理解,觉得这俩货是一样的。 最近在研究Java到C++代码自动转换时(将项目中的一部分java代码自动翻译成C++代码),才发现在细节上这两个类还是有区别的。下

2016-09-18 09:24:03 1075 1

原创 ksoap2:实现gzip压缩发送request data

ksoap能不能支持gzip数据压缩传输?我们知道webservice调用生成的xml数据挺大的,如果能压缩传输可以显著减少网络延迟,提高系统的整体性能。那么ksoap2支持gzip压缩传输么?这就是我这两天要搞清楚的问题。接收response数据ksoap2用于数据发送接收的类是由继承抽象类org.ksoap2.transport.Transport实现的HttTransportSE实现的

2016-09-09 10:02:49 1110 1

原创 axis2:ServiceClient增加GZIP压缩支持

使用axis2的ServiceClient,以RPC或Stub方式实现webservice调用时,如果要对数据进行GZIP压缩,也挺简单,只要给ServiceClient设置 MC_GZIP_REQUEST和MC_ACCEPT_GZIP 属性就可以了。 示例代码如下: Options options = serviceClient.getOptions();

2016-09-08 13:07:07 1614

原创 ultraedit:wordfiles下载页面塈增加对(dos)bat脚本的语法高亮(syntax highlighting)显示

这两天用ultraedit写bat脚本,想给ultraedit增加bat脚本的语法高亮显示支持,找到了ultraedit官网这个页面 User-submitted wordfiles for UltraEdit/UEStudio http://www.ultraedit.com/downloads/extras/wordfiles.html原来ultraedit收集好多支持各种文本格式语

2016-09-08 09:34:50 2695 1

原创 gsoap:启用http compression(gzip)进行数据压缩传输

什么是http compress?HTTP compression即网页压缩,简单说就是web服务器和浏览器客户端传送数据时,将网页数据/客户端响应数据在发送给对方前先进行压缩再传输的一种方式。 使用网页压缩可以减少数据传输大小,减少数据在网上络上传递的时间消耗,提高web服务器和客户端之间的响应速度,改善客户体验。 HTTP compression是由web服务器和浏览器之间共同遵守的协议,也

2016-09-06 16:27:37 3051 2

原创 gsoap:stub代码(C++)在mingw下与C++11代码一起编译出错

理论上,gsoap生成的代码是可以在各种编译器下编译的。但现实是我用gsoap生成的c++代码,在windows/mingw就没办法编译,在windows/vs2015下可以正常编译,在linux/gcc也能 正常编译,给人的感觉似乎是没有在mingw下做过基本测试(真的是这样吗???)。简单的错误仔细研究了编译错误,其实都很简单,都是没有正确判断win32下的编译器类型。 例如下面这段代码(ve

2016-09-06 00:35:50 1513 1

原创 计算md5的C++代码(与java结果相同)

最近需要一段计算数据md5校验码的代码,从网上找一个可以,验证可用,就拿来用了,感谢原作者。 下面是完整代码,只有一个.h文件,代码中的两处中文注释是我为了消除编译警告而修改代码加的 另外,原始代码中使用了msvc才支持的#pragma region/endregion 预处理指令,无法在其他编译器上通过编译,所以也做了修改: 在使用到#pragma region/endregion的...

2016-08-31 13:24:49 3145 1

原创 cmake:eclipse和ultraedit对CMakeLists.txt的语法高亮支持

关于编辑器对cmake的脚本的支持,参见:https://cmake.org/Wiki/CMake_Editors_Support 列出了各类编辑器对cmake脚本的支持。对于eclipse我使用CMakeEd,我的eclipse版本是lunna,在线安装不成功(https://marketplace.eclipse.org/content/cmake-editor)。 改为从这里下载安装包(ht

2016-08-30 13:33:41 2593 1

原创 C++11:变长参数模板模拟java.lang.String.format格式化输出

java.lang.String中有一个很方便的方法format,可以方便的将不同的类型的参数格式化输出成字符串,在C++下面并没有这么方便的函数来支持这个需求。 于是我用C++11的变长参数模板实现了String.format的简单模拟,完成代码如下: string_utils.h#pragma once#include #include #include

2016-08-29 17:45:30 2193 1

原创 velocity:在eclipse和ultraedit中增加对vm脚本语法的高亮显示支持

以前一直是用urltraedit来写velocity的脚本,因为没有语法高亮显示这一最基本的功能,工作起来挺费劲,效率很低。最近又要写velocity脚本,实在不能忍了,去velocity的官网仔细研究了一下,原来虽然velocity没有提供velocity的专用编译器,但是贡献者为velocity提供了在各种编译器上的语法高亮等扩展支持。 参见《Velocity and Development

2016-08-26 16:58:50 3541 1

原创 gsoap入门:Schema类型映射塈将xsd:date类型转为struct tm

typemap.dat的作用在使用wsdl2h生成.h文件时,有一个参数-t 用于指定typemap.dat,如果你不指定这个参数,wsdl2h也能正常执行,后续soapcpp2也能正常生成c/c++代码.那么这个typemap.dat有什么用呢?根据gsoap官网的解释,typename.dat是类型映射定义文件,用于定义schema 类型和c/c++类型的之间的对应关系,比如: xsd:str

2016-08-20 12:17:28 1907

原创 正则表达式:.Net Framework平衡组/递归匹配搜索源码中的函数/方法({}匹配)

有时候,我们需要用正则表达式来分析一个计算式中的符号配对情况。比如,使用表达式 “\( [^)]* \)” 或者 “\( .*? \)” 可以匹配一对小括号。但是如果括号内还嵌有一层或多层括号的话(如 “(() ( ) )“),则这种写法将不能够匹配正确 。 再比如,java代码中一个函数/方法都是由嵌套的{}构成的,如何准确的从源码文件中找出一个方法也需要对{}递归匹配或叫嵌套匹配。目前并不是所

2016-08-17 14:57:09 1373 1

原创 gsoap入门:获取服务器(axis2)端的异常(exception)对象

我们的webservice服务器端是以axis2为基础构建的,客户端提交的soap请求参数不正确或其他情况下,会抛出异常给客户端。这些异常在SOAP这一层是以Fault类型的消息呈现的,比如目前有如下异常: DeleteImgFail // 图像文件删除失败 DuplicateReord // 数据库记录重复 ImageError // 图像读写或格式错误 NotFaceDet

2016-08-13 17:40:39 1714 1

原创 gsoap入门:解决axis2服务器返回错误:com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix “ns1“

我们的项目中webservice服务器已经搭建好,基于用axis2提供名为FaceDbService的人脸识别服务。现在的任务是用gosap开发C++版本的客户端,所以最近在尝试用gsoap生成的c++代码来调用webservice. 关于生成gsoap C++客户端代码及编译,参见我的前一篇博客《gsoap入门:C/C++代码生成及编译》。测试代码下面是测试代码#include

2016-08-13 12:51:18 13263 1

原创 gsoap入门:gsoap的plugin机制说明塈使用plugin实现调试soap函数时显示request/response xml文本

昨天调用gsoap函数时出错了,通过输出错误信息,知道了是服务器端的错误(参见前一篇博客《gsoap入门:获取gsoap的错误信息》)。 但仍然是一头雾水,不知道服务器端为什么报错,还需要更详细的信息,所以想到了能不能获取ressponse xml。 于是满世界找如何能获取gsop发送和接收的xml文本的办法,在google上找到了线索:gsoap的插件(plugin)机制: gsoap 的插

2016-08-12 11:07:36 1894 1

原创 gsoap入门:获取gsoap的错误信息

今天学习gsoap的函数调用方式,一上来就出错了,错误原因还没找到,但为了查找出错原因,需要打出错误信息,于是学会了在调用gsoap的函数出错时获取错误信息的方式:struct soap soap;//... 执行gsoap调用if (soap.error!= SOAP_OK) { // 只打错误码,貌似没啥用, std::printf("soap err,err

2016-08-11 16:23:20 5969 1

原创 gsoap入门:C/C++代码生成及编译

gsoap是什么先来一段百度百科,说说gsoap是什么: gSOAP一种跨平台的开源的C/C++软件开发工具包。生成C/C++的RPC代码,XML数据绑定,对SOAP Web服务和其他应用形成高效的具体架构解析器,它们都受益于一个XML接口。 这个工具包提供了一个全面和透明的XML数据绑定解决方案,Autocoding节省大量开发时间来执行SOAP/XML Web服务中的C/C++。此外,使用X

2016-08-10 19:07:17 8276 1

原创 emacs:输出下划线

今天在用emacs写文档的时候,发现类似JAVA_HOME这样的字符串,在生成htmla时,会将_后面的HOME以下标方式输出。这里写代码片 如果你并不常用到下标,要解决这个问题,需要修改.emacs,添加一行(setq org-export-with-sub-superscripts (quote {})) 这样以来如果要输入下标,就要加{} 例如: 输入 X_{Y}, Y成为下标; 而

2016-08-06 19:09:44 1318 1

原创 axis2:用ant脚本生成webservice client 端的java/c代码

Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security

2016-08-05 10:05:10 1988 3

原创 java:构建ImageInputStream利用ImageReader对内存字节流进行图像解码

java提供了一个非常方便的图像工具类javax.imageio.ImageIO,用它的javax.imageio.ImageIO.read方法可以很方便的将一个图像文件进行解码。 javax.imageio.ImageIO.read方法有多个重载方法,支持File,InputStream,URL等参数,但这些方法有可能会在解码过程中使用文件系统做cache,有了磁盘IO势必会影响解码效率,这在性

2016-08-04 15:20:00 12692 1

原创 java:java.util.Properties的便利性封装

java.util.Properties是个常用的类,主要用于保存参数,从文件中加载配置参数,为了更方便使用,可以对它做进一步的封装。 下是面封装后的类Configuration,增加了以下方法: getProperty(String)系列方法 getProperty(String key, defaultValue)系列方法

2016-08-04 13:42:55 1113 1

原创 windows:icacls命令行修改文件使用默认继承的ACL及ant脚本实现

windows下修改文件或文件夹的权限是使用icacls命令,关于使用icals的详细说明参见icacls的命令行帮助。 如果你只是简单的想让文件继承来自文件夹默认ACL,就很方便 ,执行下面的命令就可以了 icacls filename /reset下图是icals中命令行说明,红框标注就是上面命令的解释 使用ant 脚本命令replaceregexp修改文件内容的时候会有个毛病: 修

2016-08-04 11:43:01 4657 1

原创 java:自动搜索不同位置的properties文件并加载

在项目开发中,对于一些程序运行的参数可能经常需要根据实际情况修改或调整,所以这些参数我们不会在代码中写死,而是它们保存在properties(或xml)文件中,以方便修改。程序运行时会先从properties文件中读取这些参数用于系统初始化。 举个例子来说吧,比如下面这个代码结构,我们在项目的根目录下建了一个conf目录,保存了3个properties文件。 这些文件会在项目编译时与clas

2016-08-03 10:03:02 4879 1

原创 C++11:构建多线程环境下的资源管理器

应用场景我们在多线程下开发时,经常会遇到这样一个场景,有一种资源,它是有限的n个,每个资源每次只能由一个线程独占使用。 就好像一个公共厕所,蹲坑是有限的,对于无限多个要上厕所的人来说,如果蹲坑满了大家只能排队上厕所,如果大家都不守规矩要抢着上厕所,那么门口就得站个管理员来维持秩序,每从当厕所中有空闲的坑位时,就放一个人进来,指定他用这个空闲的坑位,等再有坑位空出来就再放一个人进来,否则铁定乱套。

2016-07-30 15:38:42 1709 1

原创 C++11:基于std::unordered_map和共享锁构建线程安全的map

前一篇博客《C++:基于std::queue和std::mutex构建一个线程安全的队列》中,我们实现了一个线程安全的队列,本文我们说说如何实现一个线程安全的map。 在上一篇博客中,实现threadsafe_queue主要是依赖std::mutex信号量来实现线程对threadsafe_queue的独占访问,不论是只读的函数还是写函数对threadsafe_queue都是独占访问,因为对thre

2016-07-30 12:36:20 21680 8

原创 C++11:基于std::queue和std::mutex构建一个线程安全的队列

C++中的模板std::queue提供了一个队列容器,但这个容器并不是线程安全的,如果在多线程环境下使用队列,它是不能直接拿来用的。 基于它做一个线程安全的队列也并不复杂。基本的原理就是用std::mutext信号量对std::queue进行访问访问,以保证任何一个线程都是独占式访问,下面是完整的代码。/* * threadsafe_queue.h * * Created on: 2016

2016-07-29 19:18:48 17803 1

原创 bash shell:脚本中修改profile文件更新LD_LIBRARY_PATH的示例

当我们的一个项目完成,需要在linux下安装,就要写安装脚本,有时还需要修改profile文件修改环境变量。这时就要用到sed编辑器。sed编辑器被称作流编辑器(stream editor),跟普通交互式文件编辑器相反。在交互式编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 于是我们可以利用sed

2016-07-19 11:08:44 10584 1

原创 bash shell:获取当前脚本的绝对路径(pwd/readlink)

有时候,我们需要知道当前执行的输出shell脚本的所在绝对路径,可以用dirname实现。 我们知道 dirname 可以获取一个文件所在的路径,dirname的用处是: 输出已经去除了尾部的”/”字符部分的名称;如果名称中不包含”/”, 则显示”.”(表示当前目录)。下面是dirname的命令行说明: 从上面的描述可知道,直接从dirname返回的未必是绝对路径,取决于提供给d

2016-07-14 10:36:27 117141 1

原创 cmake:用add_subdirectory()添加外部项目文件夹

一般情况下,我们的项目各个子项目都在一个总的项目根目录下,但有的时候,我们需要使用外部的文件夹,怎么办呢? add_subdirectory命令,可以将指定的文件夹加到build任务列表中。下面是将与当前项目平级的一个目录下的子目录用add_subdirectory命令加进来的CMakelists.txt脚本片段 :#定义CASSDK位置if(NOT CASSDK_DIR) set( C

2016-07-12 15:46:14 52110 7

原创 java:从sRGB字节流(byte[])创建BufferedImage

有时候我们需要从字节流byte[]创建一个BufferedImage对象,比如将jni层返回的图像数据转为BufferedImage对象并显示出来。BufferedImage类中的BufferedImage(java.awt.image.ColorModel, WritableRaster, boolean, java.util.Hashtable)构造函数可以满足这个要求。 不过你看到这个构造函

2016-07-10 16:44:31 3025 1

原创 java:图像(BufferedImage)色彩空间转换(灰度)暨获取图像矩阵数据byte[](sRGB/gray)

ColorConvertOpjava.awt.image包下面有个类java.awt.image.ColorConvertOp,类名直译就是”颜色转换操作”。 顾名思义,它的作用就是将一个色彩空间(color space)的图像转换为另一个色彩空间的图像。有了这个神器我们就能轻易的将一张彩色图你像转换成灰度(gray)或其他色彩空间图像。 代码非常简单,只要一行。 public Buffe

2016-07-09 17:55:41 13869 1

原创 cmake:在Makefile中运行ant脚本

Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,在Java开发环境中应用非常广泛。 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake,在c/c++跨平台开发中应用非常广泛 。 有的时候,我们

2016-07-05 17:21:44 1588 1

原创 cmake:善用find_package()提高效率暨查找JNI支持

cmake提供了很多实用的cmake-modules,通过find_package()命令调用这些modules,用于写CMakeLists.txt脚本时方便的查找依赖的库或其他编译相关的信息,善用这些modules,可以提高写脚本的效率和脚本通用性。 说起来真的有点太抽象,举个我最近遇到的简单例子吧。 我们写java的JNI接口代码时,肯定是需要jni.h文件的,那么在写cmake脚本中,就需

2016-07-05 15:06:03 5266 1

原创 java:NIO读写文件的示例

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。 NIO方式读数据非常简单 创建一个缓冲区(ByteBuffer);通过一个FileChannel (从FileInputStream 创建)完成缓冲区的数据读入; NIO方式写数据也同样简单 创建一个缓冲区(ByteBuffer);向其中填充数据;然后通过一个Fil

2016-07-04 19:00:54 4909 1

原创 java:File.deleteOnExit()实现分析塈用于多级目录时的讲究

java.io.File对象有个有意思的方法deleteOnExit,这个方法的用途简单说就是要求在java虚拟机结束的时候删除该文件/目录。 删除文件,很好理解,结束的时候这个文件自动被删除,但是对于目录,我们知道,目录是可以层层嵌套的,对于一个有多级子目录的File对象?如何确保使用deleteOnExit被准确删除呢?还是举个栗子吧:package net.facesdk.cas;impo

2016-07-04 18:13:57 4291 1

原创 cmake:环境变量(environment variable)读写和if判断

cmake中对环境变量读写都是通过ENV前缀来访问环境变量 读取环境变量则要使用 $ENV{JAVA_HOME}这样的格式 写环境变量如下:set( ENV{PATH} /home/martink )if语句判断环境变量是否定义要用下面的格式if(NOT DEFINED ENV{JAVA_HOME}) # 没有找到JAVA_HOME环境变量 message(FATAL_ERRO

2016-06-27 17:08:23 47016 1

原创 cmake:EXCLUDE_FROM_ALL的用处

cmake 的add_library,add_executable,add_subdirectory等命令都有一个EXCLUDE_FROM_ALL参数. 这个参数的作用根据cmake官网的解释就是如果某个target或subdirectory被设置为EXCLUDE_FROM_ALL属性,那么这个target(或这个subdirectory中的所有target)就会被排除在all target列表之

2016-06-25 17:09:34 13115

原创 cmake设置msvc的运行库(runtime library)塈指定openjpeg使用静态库

cmake这个跨平台的make工具功能已经很强大了,但它也有不足的地方,就是本文的标题。 在用cmake生成NMake的Makefile或visual studio的.sln时,如何指定运行库(/MD /MT)? 原本,我以为可以在CMAKE的手册中找到一个command或PROPERTY或VARIABLE,简单的调用或设置一下就可以了,很遗憾,把整个CMAKE manual翻了几遍也没找到,没

2016-06-22 17:04:11 7552

原创 nmake(vs2015)命令行编译libjpeg-turbo(x86/amd64)

很久之前写过一篇博客《mingw(gcc)编译libjpeg-turbo》,介绍了windows下用mingw编译libjpeg-turbo的过程。 当时对cmake的使用并不非常熟悉,对msvc的命令行编译也不在行,所以还不会用msvc编译libjpeg_turbo源码,所以只能从暂时libjpeg_turbo的官网(http://libjpeg-turbo.virtualgl.org/)下载...

2016-06-22 11:50:12 6959 3

原创 cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别)

在cmake脚本中,设置编译选项可以通过add_compile_options命令,也可以通过set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS。 使用这两种方式在有的情况下效果是一样的,但请注意它们还是有区别的: add_compile_options命令添加的编译选项是针对所有编译器的(包括c和c++编译器),而set命令设置CMAKE_C_FLAGS或CMAKE_CX

2016-06-22 09:53:48 121471

CMake脚本在ultraedit中的语法高亮支持

资源来自CMake官网: http://www.cmake.org/Wiki/images/5/56/UltraEditWordfile.tar.gz, 但这个链接已经无法访问,从历史快照中找加,上传备份 参见使用方法参见:https://blog.csdn.net/10km/article/details/52368486

2023-06-08

erpcgen-windows-x86_64.zip

用cygwin编译的erpcgen,可以windows下直接通过IDL编译生成client/server端(C++)代码,有cygwin的童鞋也可以自行编译,很方便的。 erpc git仓位置: https://github.com/EmbeddedRPC/erpc

2020-09-17

windows下MSVC兼容的dirent.h

<dirent.h>是一个应用程序接口,主要用于文件系统的目录读取操作,主要提供了几个目录数据读取函数,<dirent.h>是unix系统下常见的接口,但windows平台的MSVC编译器并没有提供这个接口( Cygwin5 and MingW现在已经提供了dirent接口),对于跨平台的项目开发就会带来一些麻烦,如果在MSVC下编译时可能因为windows平台缺少这个接口就要为windows平台另外写一些代码。本资源是从网上找的,提供了windows下为MSVC实现的dirent.h接口实现,方便跨平台开发和移植。

2016-03-31

libb64--base64编码解码库

libb64是实现base64编码解码的开源库,还提供了C++封装,用起来挺方便

2016-03-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除