﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Canvas-文章分类-JNI技术学习笔记</title><link>http://www.blogjava.net/canvas/category/31246.html</link><description>Wong's Blog</description><language>zh-cn</language><lastBuildDate>Thu, 08 May 2008 04:09:14 GMT</lastBuildDate><pubDate>Thu, 08 May 2008 04:09:14 GMT</pubDate><ttl>60</ttl><item><title>打造ICTCLAS JNI For Java</title><link>http://www.blogjava.net/canvas/articles/jni-free-ictclas.html</link><dc:creator>Canvas Wong</dc:creator><author>Canvas Wong</author><pubDate>Tue, 06 May 2008 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/canvas/articles/jni-free-ictclas.html</guid><wfw:comment>http://www.blogjava.net/canvas/comments/198704.html</wfw:comment><comments>http://www.blogjava.net/canvas/articles/jni-free-ictclas.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/canvas/comments/commentRss/198704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/canvas/services/trackbacks/198704.html</trackback:ping><description><![CDATA[<font color="red">声明:ICTCLAS以及我修改ICTCLAS JNI For Java的版权均归原作者所有，未经原作者允许，请勿作其它商业用途</font> <br />
首先下载ICTCLAS Beta版本公开源代码:<a href="http://www.i3s.ac.cn/FreeICTCLAS.zip">点击下载</a> <br />
我使用的是Visual studio 2005开发环境，源码使用VC6开发的，现在把这个工程转移到VS2005下。我使用的方法比较笨，基本上是属于体力+暴力型的，不过自己觉得爽就可以了<br />
在VS2005里新建Win32项目FREEICTCLAS,在application Settings选项里选中Dll和Empty Project,然后新建以下过滤器(New Filter)，并且将原项目的源码及其目录结构copy到现在的win32项目的目录下(过滤器和项目目录示意图)<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img class="hiddenArea" id="Code_Closed_Image1" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text1').style.display='none'; document.getElementById('Code_Open_Image1').style.display='inline'; document.getElementById('Code_Open_Text1').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" name="Code_Closed_Image1" /> <img class="rd_message" id="Code_Open_Image1" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text1').style.display='none'; document.getElementById('Code_Closed_Image1').style.display='inline'; document.getElementById('Code_Closed_Text1').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" name="Code_Open_Image1" /> <span id="Code_Closed_Text1" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">示意图(点击前面+号展开)</span> <span id="Code_Open_Text1" style="display: none"><br />
<table border="0">
    <tbody>
        <tr>
            <td width="40">&nbsp;</td>
            <td valign="top"><img alt="" src="http://www.blogjava.net/images/blogjava_net/canvas/newfilter.gif" /></td>
            <td valign="top"><img alt="" src="http://www.blogjava.net/images/blogjava_net/canvas/dirStruct.gif" /></td>
        </tr>
    </tbody>
</table>
</span></div>
<br />
这样这个win32工程基本就建完了。<br />
观察ICTCLAS源代码后编写以下带有native声明的方法的java类，只实现了头两个方法，第三个暂未实现，与ICTCLAS接口基本保持一致<br />
代码如下:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Code_Closed_Image_142429" onclick="this.style.display='none'; Code_Closed_Text_142429.style.display='none'; Code_Open_Image_142429.style.display='inline'; Code_Open_Text_142429.style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_142429" style="display: none" onclick="this.style.display='none'; Code_Open_Text_142429.style.display='none'; Code_Closed_Image_142429.style.display='inline'; Code_Closed_Text_142429.style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_142429" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">FreeICTCLAS.java(点击+展开)</span><span id="Code_Open_Text_142429" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FreeICTCLAS&nbsp;<br />
<img id="Codehighlighter1_26_630_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_630_Open_Text.style.display='none'; Codehighlighter1_26_630_Closed_Image.style.display='inline'; Codehighlighter1_26_630_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_26_630_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_26_630_Closed_Text.style.display='none'; Codehighlighter1_26_630_Open_Image.style.display='inline'; Codehighlighter1_26_630_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_26_630_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_26_630_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_29_52_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_52_Open_Text.style.display='none'; Codehighlighter1_29_52_Closed_Image.style.display='inline'; Codehighlighter1_29_52_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_29_52_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_29_52_Closed_Text.style.display='none'; Codehighlighter1_29_52_Open_Image.style.display='inline'; Codehighlighter1_29_52_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_29_52_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_29_52_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;初始化设置取值都是0,1,2<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">native</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;FreeICTCLAS_Init(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;OperateType,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;OutputFormat);<br />
<img id="Codehighlighter1_131_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_131_159_Open_Text.style.display='none'; Codehighlighter1_131_159_Closed_Image.style.display='inline'; Codehighlighter1_131_159_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_131_159_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_131_159_Closed_Text.style.display='none'; Codehighlighter1_131_159_Open_Image.style.display='inline'; Codehighlighter1_131_159_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_131_159_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_131_159_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;与Free版本中有所不同,返回值为结果<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">native</span><span style="color: #000000">&nbsp;String&nbsp;FreeICTCLAS_ParagraphProcess(String&nbsp;sParagraph);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_235_258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_258_Open_Text.style.display='none'; Codehighlighter1_235_258_Closed_Image.style.display='inline'; Codehighlighter1_235_258_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_235_258_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_235_258_Closed_Text.style.display='none'; Codehighlighter1_235_258_Open_Image.style.display='inline'; Codehighlighter1_235_258_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_235_258_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_235_258_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;与Free版本中基本保持一致<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">native</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;FreeICTCLAS_FileProcess(String&nbsp;sSourceFilename,&nbsp;String&nbsp;sResultFilename);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_398_628_Open_Image" onclick="this.style.display='none'; Codehighlighter1_398_628_Open_Text.style.display='none'; Codehighlighter1_398_628_Closed_Image.style.display='inline'; Codehighlighter1_398_628_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_398_628_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_398_628_Closed_Text.style.display='none'; Codehighlighter1_398_628_Open_Image.style.display='inline'; Codehighlighter1_398_628_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_398_628_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_398_628_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary(</span><span style="color: #000000">"</span><span style="color: #000000">FreeICTCLAS</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS&nbsp;test&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FreeICTCLAS();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.FreeICTCLAS_Init(</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;test.FreeICTCLAS_ParagraphProcess(</span><span style="color: #000000">"</span><span style="color: #000000">与Free版本中有所不同,返回值为结果，和平奥运，绿色奥运，今天天气很是不错啊</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></span></div>
然后在命令行输入Javac FreeICTCLAS.java编译FreeICTCLAS.java<br />
生成FreeICTCLAS.class文件后，再使用javah FreeICTCLAS生成FreeICTCLAS.h，代码如下：<br />
<div title="FreeICTCLAS.h" style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_52_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_52_Open_Text.style.display='none'; Codehighlighter1_0_52_Closed_Image.style.display='inline'; Codehighlighter1_0_52_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_52_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_52_Closed_Text.style.display='none'; Codehighlighter1_0_52_Open_Image.style.display='inline'; Codehighlighter1_0_52_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_52_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_52_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;DO&nbsp;NOT&nbsp;EDIT&nbsp;THIS&nbsp;FILE&nbsp;-&nbsp;it&nbsp;is&nbsp;machine&nbsp;generated&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">jni.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_71_104_Open_Image" onclick="this.style.display='none'; Codehighlighter1_71_104_Open_Text.style.display='none'; Codehighlighter1_71_104_Closed_Image.style.display='inline'; Codehighlighter1_71_104_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_71_104_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_71_104_Closed_Text.style.display='none'; Codehighlighter1_71_104_Open_Image.style.display='inline'; Codehighlighter1_71_104_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_71_104_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_71_104_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;Header&nbsp;for&nbsp;class&nbsp;FreeICTCLAS&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#ifndef&nbsp;_Included_FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#define&nbsp;_Included_FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#ifdef&nbsp;__cplusplus<br />
<img id="Codehighlighter1_197_878_Open_Image" onclick="this.style.display='none'; Codehighlighter1_197_878_Open_Text.style.display='none'; Codehighlighter1_197_878_Closed_Image.style.display='inline'; Codehighlighter1_197_878_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_197_878_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_197_878_Closed_Text.style.display='none'; Codehighlighter1_197_878_Open_Image.style.display='inline'; Codehighlighter1_197_878_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />extern&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">C</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_197_878_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_197_878_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />#endif<br />
<img id="Codehighlighter1_206_288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_206_288_Open_Text.style.display='none'; Codehighlighter1_206_288_Closed_Image.style.display='inline'; Codehighlighter1_206_288_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_206_288_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_206_288_Closed_Text.style.display='none'; Codehighlighter1_206_288_Open_Image.style.display='inline'; Codehighlighter1_206_288_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_206_288_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_206_288_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS_Init<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Signature:&nbsp;(II)Z<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />JNIEXPORT&nbsp;jboolean&nbsp;JNICALL&nbsp;Java_FreeICTCLAS_FreeICTCLAS_1Init<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;(JNIEnv&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">,&nbsp;jobject,&nbsp;jint,&nbsp;jint);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_388_515_Open_Image" onclick="this.style.display='none'; Codehighlighter1_388_515_Open_Text.style.display='none'; Codehighlighter1_388_515_Closed_Image.style.display='inline'; Codehighlighter1_388_515_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_388_515_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_388_515_Closed_Text.style.display='none'; Codehighlighter1_388_515_Open_Image.style.display='inline'; Codehighlighter1_388_515_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_388_515_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_388_515_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS_ParagraphProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Signature:&nbsp;(Ljava/lang/String;)Ljava/lang/String;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />JNIEXPORT&nbsp;jstring&nbsp;JNICALL&nbsp;Java_FreeICTCLAS_FreeICTCLAS_1ParagraphProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;(JNIEnv&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">,&nbsp;jobject,&nbsp;jstring);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_623_746_Open_Image" onclick="this.style.display='none'; Codehighlighter1_623_746_Open_Text.style.display='none'; Codehighlighter1_623_746_Closed_Image.style.display='inline'; Codehighlighter1_623_746_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_623_746_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_623_746_Closed_Text.style.display='none'; Codehighlighter1_623_746_Open_Image.style.display='inline'; Codehighlighter1_623_746_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span id="Codehighlighter1_623_746_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_623_746_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS_FileProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Signature:&nbsp;(Ljava/lang/String;Ljava/lang/String;)Z<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />JNIEXPORT&nbsp;jboolean&nbsp;JNICALL&nbsp;Java_FreeICTCLAS_FreeICTCLAS_1FileProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;(JNIEnv&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">,&nbsp;jobject,&nbsp;jstring,&nbsp;jstring);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />#ifdef&nbsp;__cplusplus<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#endif<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#endif<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
将FreeICTCLAS.h拷贝到win32项目所在目录中，再将其添加到项目中，接下来就是编写FreeICTCLAS.cpp实现头文件里方法<br />
主要代码如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">FreeICTCLAS.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">util.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">globeVar.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">string.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">stdlib.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_105_183_Open_Image" onclick="this.style.display='none'; Codehighlighter1_105_183_Open_Text.style.display='none'; Codehighlighter1_105_183_Closed_Image.style.display='inline'; Codehighlighter1_105_183_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_105_183_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_105_183_Closed_Text.style.display='none'; Codehighlighter1_105_183_Open_Image.style.display='inline'; Codehighlighter1_105_183_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_105_183_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_105_183_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS_Init<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Signature:&nbsp;(II)Z<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />JNIEXPORT&nbsp;jboolean&nbsp;JNICALL&nbsp;Java_FreeICTCLAS_FreeICTCLAS_1Init<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />(JNIEnv&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">env,&nbsp;jobject&nbsp;obj,&nbsp;jint&nbsp;OperateType,&nbsp;jint&nbsp;OutputFormat)<br />
<img id="Codehighlighter1_311_415_Open_Image" onclick="this.style.display='none'; Codehighlighter1_311_415_Open_Text.style.display='none'; Codehighlighter1_311_415_Closed_Image.style.display='inline'; Codehighlighter1_311_415_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_311_415_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_311_415_Closed_Text.style.display='none'; Codehighlighter1_311_415_Open_Image.style.display='inline'; Codehighlighter1_311_415_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_311_415_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_311_415_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;m_ICTCLAS.m_nOperateType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OperateType;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;m_ICTCLAS.m_nOutputFormat&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OutputFormat;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;JNI_TRUE;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_417_540_Open_Image" onclick="this.style.display='none'; Codehighlighter1_417_540_Open_Text.style.display='none'; Codehighlighter1_417_540_Closed_Image.style.display='inline'; Codehighlighter1_417_540_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_417_540_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_417_540_Closed_Text.style.display='none'; Codehighlighter1_417_540_Open_Image.style.display='inline'; Codehighlighter1_417_540_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_417_540_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_417_540_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS_ParagraphProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Signature:&nbsp;(Ljava/lang/String;)Ljava/lang/String;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />JNIEXPORT&nbsp;jstring&nbsp;JNICALL&nbsp;Java_FreeICTCLAS_FreeICTCLAS_1ParagraphProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />(JNIEnv&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">env,&nbsp;jobject&nbsp;obj,&nbsp;jstring&nbsp;sParagraph)<br />
<img id="Codehighlighter1_662_972_Open_Image" onclick="this.style.display='none'; Codehighlighter1_662_972_Open_Text.style.display='none'; Codehighlighter1_662_972_Closed_Image.style.display='inline'; Codehighlighter1_662_972_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_662_972_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_662_972_Closed_Text.style.display='none'; Codehighlighter1_662_972_Open_Image.style.display='inline'; Codehighlighter1_662_972_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_662_972_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_662_972_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">sResult,</span><span style="color: #000000">*</span><span style="color: #000000">sSource;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;sSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;jstringTochar(env,&nbsp;sParagraph);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(m_ICTCLAS.m_nOutputFormat</span><span style="color: #000000">!=</span><span style="color: #000000">2</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sResult</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;[(strlen(sSource)</span><span style="color: #000000">+</span><span style="color: #000000">13</span><span style="color: #000000">)</span><span style="color: #000000">*</span><span style="color: #000000">3</span><span style="color: #000000">];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sResult</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;[(strlen(sSource)</span><span style="color: #000000">+</span><span style="color: #000000">13</span><span style="color: #000000">)</span><span style="color: #000000">*</span><span style="color: #000000">50</span><span style="color: #000000">];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">m_ICTCLAS.ParagraphProcessing(sSource,sResult))<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;chartoJstring(env,sResult);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_974_1093_Open_Image" onclick="this.style.display='none'; Codehighlighter1_974_1093_Open_Text.style.display='none'; Codehighlighter1_974_1093_Closed_Image.style.display='inline'; Codehighlighter1_974_1093_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_974_1093_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_974_1093_Closed_Text.style.display='none'; Codehighlighter1_974_1093_Open_Image.style.display='inline'; Codehighlighter1_974_1093_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_974_1093_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_974_1093_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;FreeICTCLAS_FileProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;Signature:&nbsp;(Ljava/lang/String;Ljava/lang/String;)Z<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />JNIEXPORT&nbsp;jboolean&nbsp;JNICALL&nbsp;Java_FreeICTCLAS_FreeICTCLAS_1FileProcess<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />(JNIEnv&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">env,&nbsp;jobject&nbsp;obj,&nbsp;jstring&nbsp;sSourceFilename,&nbsp;jstring&nbsp;sResultFilename)<br />
<img id="Codehighlighter1_1241_1261_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1241_1261_Open_Text.style.display='none'; Codehighlighter1_1241_1261_Closed_Image.style.display='inline'; Codehighlighter1_1241_1261_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1241_1261_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1241_1261_Closed_Text.style.display='none'; Codehighlighter1_1241_1261_Open_Image.style.display='inline'; Codehighlighter1_1241_1261_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1241_1261_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1241_1261_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;JNI_TRUE;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
编译项目，在release目录中找到FreeICTCLAS.dll，将其拷贝到FreeICTCLAS.class所在的目录中<br />
现在运行java FreeICTCLAS即可看到中文分词的结果啦<br />
<br />
怎么把ICTCLAS JNI for Java添加到eclipse项目中去?下次写吧。<br />
当你看到这句话的时候，你可以直接发邮件向我索要win32项目和eclipse项目&nbsp;<br />
BlogJava后台编辑器不好用，^_^
 <img src ="http://www.blogjava.net/canvas/aggbug/198704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/canvas/" target="_blank">Canvas Wong</a> 2008-05-06 14:40 <a href="http://www.blogjava.net/canvas/articles/jni-free-ictclas.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JNI技术入门之Hello World篇</title><link>http://www.blogjava.net/canvas/articles/JNI-Hello-World.html</link><dc:creator>Canvas Wong</dc:creator><author>Canvas Wong</author><pubDate>Mon, 05 May 2008 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/canvas/articles/JNI-Hello-World.html</guid><wfw:comment>http://www.blogjava.net/canvas/comments/198438.html</wfw:comment><comments>http://www.blogjava.net/canvas/articles/JNI-Hello-World.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/canvas/comments/commentRss/198438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/canvas/services/trackbacks/198438.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span>毕业设计是做一个中文的XML信息检索系统。当时选题的时候真的是不知道天高地厚，选了这么一个难题，但是毕竟已经选了，那就不要畏缩了！查阅了信息检索的相关资料后，遇到了一个很棘手的问题——中文如何分词？这是个大问题，不知道如何入手。于是查查资料看看有没有现成中文分词系统拿来用，这一找就找到了中科院的ICTCLAS。网上已经有很多的已经封装好了的ICTCLAS.dll，由于毕设打算用Java技术打造一个系统原型，那就需要通过JNI技术来调用ICTCLAS.dll。其实这也已经有人做好了，但是，我还是想知道JNI的个什么样的东西，还想知道如何正确的使用这个技术。 </span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 12pt"><span>已经习惯了从Hello World开始。<br />
我使用的是JDK_1.6.0和Visual studio 2005，使用Visual studio 2005生成可供Java调用的dll需要做以下设置：<br />
在Visual studio 2005的菜单Tools\options\Projects and Solutions\VC++ Directories，添加JDK安装目录下inlcude和include/win32目录,如下图所示</span></span></span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img class="hiddenArea" id="Code_Closed_Image1" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text1').style.display='none'; document.getElementById('Code_Open_Image1').style.display='inline'; document.getElementById('Code_Open_Text1').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" name="Code_Closed_Image1" /> <img class="rd_message" id="Code_Open_Image1" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text1').style.display='none'; document.getElementById('Code_Closed_Image1').style.display='inline'; document.getElementById('Code_Closed_Text1').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" name="Code_Open_Image1" /> <span id="Code_Closed_Text1" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">设置图(点击前面+号展开)</span> <span id="Code_Open_Text1" style="display: none"><br />
<img alt="vs05设置" src="http://www.blogjava.net/images/blogjava_net/canvas/vs2005_jni.png" /> </span></div>
<p>编写带有native声明的方法的java类，代码如下</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img class="hiddenArea" id="Code_Closed_Image" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text').style.display='none'; document.getElementById('Code_Open_Image').style.display='inline'; document.getElementById('Code_Open_Text').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" name="Code_Closed_Image" /> <img class="yzy_message" id="Code_Open_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text').style.display='none'; document.getElementById('Code_Closed_Image').style.display='inline'; document.getElementById('Code_Closed_Text').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" name="Code_Open_Image" /> <span id="Code_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">JniTest.java(点击前面+号展开)</span> <span id="Code_Open_Text" style="display: none"><br />
<pre><font face="Fixedsys">
<font color="#0000ff">public class </font><font color="#000000">JniTest{</font>
<font color="#008000">/*静态块装载JniTest.dll，不用写出后缀名.dll,因为不同平台，系统会自动识别*/</font>
<font color="#0000ff">static </font><font color="#000000">{</font>
<font color="#008080">System</font><font color="#000000">.</font><font color="#ff0000">loadLibrary</font><font color="#000000">(</font><font color="#ff00ff">"JniTest"</font><font color="#000000">);</font>
<font color="#000000">}</font>
<font color="#008000">/*native方法申明,不要写具体的实现*/</font>
<font color="#0000ff">public native void </font><font color="#000000">sayHello();</font>
<font color="#000000">}</font>
</font>
</pre>
</span></div>
<p>然后在命令行输入Javac JniTest.java编译JniTest.java<br />
生成JniTest.class文件后，再使用javah JniTest生成JniTest.h，代码如下</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img class="hiddenArea" id="Code_Closed_Image2" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text2').style.display='none'; document.getElementById('Code_Open_Image2').style.display='inline'; document.getElementById('Code_Open_Text2').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" name="Code_Closed_Image2" /> <img class="wl_message" id="Code_Open_Image2" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text2').style.display='none'; document.getElementById('Code_Closed_Image2').style.display='inline'; document.getElementById('Code_Closed_Text2').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" name="Code_Open_Image2" /> <span id="Code_Closed_Text2" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">JniTest.h(点击前面+号展开)</span> <span id="Code_Open_Text2" style="display: none"><br />
<pre><font face="Fixedsys">
<font color="#008000">/* DO NOT EDIT THIS FILE - it is machine generated */</font>
<font color="#ff0000">#include </font><font color="#000000">&lt;jni.h&gt;</font>
<font color="#008000">/* Header for class JniTest */</font>
<font color="#ff0000">#ifndef </font><font color="#000000">_Included_JniTest</font>
<font color="#ff0000">#define </font><font color="#000000">_Included_JniTest</font>
<font color="#ff0000">#ifdef </font><font color="#000000">__cplusplus</font>
<font color="#0000ff">extern </font><font color="#ff00ff">"C" </font><font color="#000000">{</font>
<font color="#ff0000">#endif</font>
<font color="#008000">/*</font>
<font color="#008000"> * Class:     JniTest</font>
<font color="#008000"> * Method:    sayHello</font>
<font color="#008000"> * Signature: ()V</font>
<font color="#008000"> */</font>
<font color="#000000">JNIEXPORT </font><font color="#0000ff">void </font><font color="#000000">JNICALL Java_JniTest_sayHello</font>
<font color="#000000">(JNIEnv *, jobject);</font>
<font color="#ff0000">#ifdef </font><font color="#000000">__cplusplus</font>
<font color="#000000">}</font>
<font color="#ff0000">#endif</font>
<font color="#ff0000">#endif</font>
</font>
</pre>
</span></div>
<p>在Visual studio 2005里新建项目Win32 project，在弹出的对话框中点击application setting，然后再选上dll和Empty project。 接着在项目中添加JniTest.h和JniTest.cpp，JniTest.cpp代码如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img class="hiddenArea" id="Code_Closed_Image3" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text3').style.display='none'; document.getElementById('Code_Open_Image3').style.display='inline'; document.getElementById('Code_Open_Text3').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" name="Code_Closed_Image3" /> <img class="wl_message" id="Code_Open_Image3" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text3').style.display='none'; document.getElementById('Code_Closed_Image3').style.display='inline'; document.getElementById('Code_Closed_Text3').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" name="Code_Open_Image3" /> <span id="Code_Closed_Text3" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">JniTest.cpp(点击前面+号展开)</span> <span id="Code_Open_Text3" style="display: none"><br />
<pre><font face="Fixedsys">
<font color="#ff0000">#include </font><font color="#ff00ff">"JniTest.h"</font>
<font color="#ff0000">#include</font><font color="#000000">&lt;stdio.h&gt;</font>
<font color="#000000">JNIEXPORT </font><font color="#0000ff">void </font><font color="#000000">JNICALL Java_JniTest_sayHello</font>
<font color="#000000">(JNIEnv *, jobject)</font>
<font color="#000000">{</font>
<font color="#000000">printf(</font><font color="#ff00ff">"Hello World！\n"</font><font color="#000000">);</font>
<font color="#000000">}</font>
</font>
</pre>
</span></div>
<p>编译生成JniTest.dll,在项目下找到它，并拷贝到JniTest.java所在的目录,最后编写测试程序Test.java，如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img class="hiddenArea" id="Code_Closed_Image4" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text4').style.display='none'; document.getElementById('Code_Open_Image4').style.display='inline'; document.getElementById('Code_Open_Text4').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" name="Code_Closed_Image4" /> <img class="wl_message" id="Code_Open_Image4" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text4').style.display='none'; document.getElementById('Code_Closed_Image4').style.display='inline'; document.getElementById('Code_Closed_Text4').style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" name="Code_Open_Image4" /> <span id="Code_Closed_Text4" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Test.java(点击前面+号展开)</span> <span id="Code_Open_Text4" style="display: none"><br />
<pre><font face="Fixedsys">
<font color="#0000ff">public class </font><font color="#000000">Test</font>
<font color="#000000">{</font>
<font color="#0000ff">public static void </font><font color="#000000">main(</font><font color="#008080">String</font><font color="#000000">[] args){</font>
<font color="#0000ff">new </font><font color="#000000">JniTest().jniTest.sayHello();</font>
<font color="#000000">}</font>
<font color="#000000">}</font>
</font>
</pre>
</span></div>
<p>&nbsp;最后终于看到了期待的Hello World!</span></span></p>
<img src ="http://www.blogjava.net/canvas/aggbug/198438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/canvas/" target="_blank">Canvas Wong</a> 2008-05-05 14:29 <a href="http://www.blogjava.net/canvas/articles/JNI-Hello-World.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>