[WEB] DIV CSS完美兼容IE6/IE7/FF的通用方法

來源:iwcpu.com

關於CSS對各個瀏覽器兼容已經是老生常談的問題了,網絡上的教程遍地都是.以下內容沒有太多新穎,純屬個人總結,希望能對初學者有一定的幫助.

一、CSS HACK
以下兩種方法幾乎能解決現今所有HACK.

1, !important

隨著IE7對!important的支持, !important方法現在只針對IE6的HACK.(注意寫法.記得該聲明位置需要提前.)

#wrapper{
width: 100px!important; / IE7+FF /
width: 80px; / IE6 /
}
2, IE6/IE77對FireFox

+html與html是IE特有的標籤, firefox暫不支持
+html又為IE7特有標籤.
<style>
#wrapper {
#wrapper { width: 120px; } /
FireFox / html #wrapper { width: 80px;} / ie6 fixed /
+html #wrapper { width: 60px;} / ie7 fixed,注意順序/
}
</style>

注意: +html對IE7的HACK必須保證HTML頂部有如下聲明:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN””http://www.w3.org/TR/html4/loose.dtd">

二、萬能float閉合

關於clear float的原理可參見[How To Clear Floats Without Structural Markup]
將以下代碼加入Global CSS中,給需要閉合的div加上class=”clearfix”即可,屢試不爽.
<style>
/ Clear Fix /
.clearfix:after{
 content:”.”;
 display:block;
 height:0;
 clear:both;
 visibility:hidden;
}

.clearfix{
 display:inline-block;
}

/ Hide from IE Mac /
.clearfix {
 display:block;
}
/ End hide from IE Mac /

/ end of clearfix /
</style>

三、其他兼容技巧

1, FF下給div設置padding後會導致width和height增加,但IE不會.(可用!important解決)
2,居中問題.
1).垂直居中.將line-height設置為當前div相同的高度,再通過vertical-align: middle.(注意內容不要換行.)
2).水平居中. margin: 0 auto;(當然不是萬能)
3,若需給a標籤內內容加上樣式,需要設置display: block;(常見於導航標籤)
4, FF和IE對BOX理解的差異導致相差2px的還有設為float的div在ie下margin加倍等問題.
5, ul標籤在FF下面默認有list-style和padding .最好事先聲明,以避免不必要的麻煩. (常見於導航標籤和內容列表)
6,作為外部wrapper的div不要定死高度,最好還加上overflow: hidden.以達到高度自適應.
7,關於手形光標. cursor: pointer.而hand只適用於IE.

1針對firefox ie6 ie7的css樣式
現在大部分都是用!important來hack,對於ie6和firefox測試可以正常顯示,
但是ie7對!important可以正確解釋,會導致頁面沒按要求顯示!找到一個針
對IE7不錯的hack方式就是使用“+html”,現在用IE7瀏覽一下,應該沒有問題了。
現在寫一個CSS可以這樣:

#1 { color: #333; } /
Moz / html #1 { color: #666; } / IE6 /
+html #1 { color: #999; } / IE7 */

那麼在firefox下字體顏色顯示為#333,IE6下字體顏色顯示為#666,IE7下字體顏色顯示為#999。

2 css佈局中的居中問題
主要的樣式定義如下:

body {
TEXT-ALIGN: center;
}

#center{
MARGIN-RIGHT: auto;
MARGIN-LEFT: auto;
}

說明:
首先在父級元素定義TEXT-ALIGN: center;這個的意思就是在父級元素內的內容居中;對於IE這樣設定就已經可以了。
但在mozilla中不能居中。解決辦法就是在子元素定義時候設定時再加上“MARGIN-RIGHT: auto;MARGIN-LEFT: auto; ”
需要說明的是,如果你想用這個方法使整個頁面要居中,建議不要套在一個DIV裡,你可以依次拆出多個div,
只要在每個拆出的div裡定義MARGIN-RIGHT: auto;MARGIN-LEFT: auto;就可以了。

3盒模型不同解釋

#box{
width:600px; //for ie6.0-
width:500px; //for ff+ie6.0
}
#box{
width:600px!important //for ff
width:600px; //for ff+ie6.0
width /**/:500px; //for ie6.0-
}

4浮動ie產生的雙倍距離

#box{
float:left;
width:100px;
margin:0 0 0 100px; //這種情況之下IE會產生200px的距離
display:inline; //使浮動忽略
}
這裡細說一下block,inline兩個元素,Block元素的特點是:總是在新行上開始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點是:和其他元素在同一行上,…不可控制(內嵌元素);

#box{
display:block;//可以為內嵌元素模擬為塊元素
display:inline; //實現同一行排列的的效果
diplay:table;

IE不認得min-這個定義,但實際上它把正常的width和height當作有min的情況來使。這樣問題就大了,如果只用寬度和高度,
正常的瀏覽器裡這兩個值就不會變,如果只用min-width和min-height的話,IE下面根本等於沒有設置寬度和高度。
比如要設置背景圖片,這個寬度是比較重要的。要解決這個問題,可以這樣:

#box{ width: 80px; height: 35px;}html>body

#box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
6頁面的最小寬度

min-width是個非常方便的CSS命令,它可以指定元素最小也不能小於某個寬度,這樣就能保證排版一直正確。但IE不認得這個,
而它實際上把width當做最小寬度來使。為了讓這一命令在IE上也能用,可以把一個<div>放到<body>標籤下,然後為div指定一個類:
然後CSS這樣設計:

#container{
min-width: 600px;
width:expression(document.body.clientWidth < 600? “600px”: “auto” );
}
第一個min-width是正常的;但第2行的width使用了Javascript,這只有IE才認得,這也會讓你的HTML文檔不太正規。它實際上通過Javascript的判斷來實現最小寬度。

7清除浮動

.hackbox{ display:table; //將對像作為塊元素級的表格顯示}或者
.hackbox{ clear:both;}
或者加入:after(偽對象),設置在對像後發生的內容,通常和content配合使用,IE不支持此偽對象,非Ie瀏覽器支持,
所以並不影響到IE/WIN瀏覽器。這種的最麻煩的……

#box:after{
content: “.”;
display: block;
height: 0;
clear: both;
visibility: hidden;
}

8 DIV浮動IE文本產生3像素的bug

左邊對象浮動,右邊採用外補丁的左邊距來定位,右邊對象內的文本會離左邊有3px的間距.

#box{
float:left;
width:800px;
}

#left{
float:left;
width:50%;
}

#right
{
width:50%;
}
*html #left{
margin-right:-3px; //這句是關鍵
}
HTML代碼
<div id=”box”>
<div id=”left”></div>
<div id=”right”></div>
</div>

9屬性選擇器(這個不能算是兼容,是隱藏css的一個bug)

p[id]{}div[id]{}
這個對於IE6.0和IE6.0以下的版本都隱藏,FF和OPera作用
屬性選擇器和子選擇器還是有區別的,子選擇器的範圍從形式來說縮小了,屬性選擇器的範圍比較大,如p[id]中,所有p標籤中有id的都是同樣式的.

10 IE捉迷藏的問題

當div應用複雜的時候每個欄中又有一些鏈接,DIV等這個時候容易發生捉迷藏的問題。
有些內容顯示不出來,當鼠標選擇這個區域是發現內容確實在頁面。
解決辦法:對#layout使用line-height屬性或者給#layout使用固定高和寬。頁面結構盡量簡單。

11高度不適應

高度不適應是當內層對象的高度發生變化時外層高度不能自動進行調節,特別是當內層對象使用
margin或paddign時。

例:
<div id=”box”>
<p>p對像中的內容</p>
</div>
CSS:

#box {
background-color:#eee;
}

#box p {
margin-top: 20px;
margin-bottom: 20px;
text-align:center;
}


解決方法:在P對像上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。

六、CSS兼容要點分析IE vs FF

CSS兼容要點:

DOCTYPE影響CSS處理

FF: div設置margin-left, margin-right為auto時已經居中, IE不行

FF: body設置text-align時, div需要設置margin: auto(主要是margin-left,margin-right)方可居中

FF:設置padding後, div會增加height和width,但IE不會,故需要用!important多設一個height和width

FF:支持!important, IE則忽略,可用!important為FF特別設置樣式

div的垂直居中問題: vertical-align:middle;將行距增加到和整個DIV一樣高line-height:200px;然後插入文字,就垂直居中了。缺點是要控制內容不要換行

cursor: pointer可以同時在IE FF中顯示游標手指狀, hand僅IE可以

FF:鏈接加邊框和背景色,需設置display: block,同時設置float: left保證不換行。參照menubar,給a和menubar設置高度是為了避免底邊顯示錯位,若不設height,可以在menubar中插入一個空格XHTML+CSS兼容性解決方案小集

使用XHTML+CSS構架好處不少,但也確實存在一些問題,不論是因為使用不熟練還是思路不清晰,我就先把一些我遇到的問題寫在下面,省的大家四處找^^

1、在mozilla firefox和IE中的BOX模型解釋不一致導致相差2px解決方法:

div{
margin:30px !important;
margin:28px;
}

注意這兩個margin的順序一定不能寫反,據阿捷的說法!important這個屬性IE不能識別,但別的瀏覽器可以識別。所以在IE下其實解釋成這樣:

div{
maring:30px;
margin:28px;
}

重複定義的話按照最後一個來執行,所以不可以只寫margin:XXpx!important;

2、IE5和IE6的BOX解釋不一致IE5下div{width:300px;margin:0 10px 0 10px;}div的寬度會被解釋為300px-10px(右填充)-10px(左填充)最終div的寬度為280px,而在IE6和其他瀏覽器上寬度則是以300px+10px(右填充)+10px(左填充)=320px來計算的。這時我們可以做如下修改

div{
width:300px !important;
width /**/:340px;
margin:0 10px 0 10px;
}

,關於這個/**/是什麼我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的話,請告訴我一聲,謝了! :)

3、ul標籤在Mozilla中默認是有padding值的,而在IE中只有margin有值所以先定義

ul{
margin:0;
padding:0;
}

就能解決大部分問題


//////2009/7/28//////////////////
p {
    color:#F00;  /FF & 所有 IE/
    color:#FF09;  /所有 IE/
    color:#0F0;  /IE7 IE6/
    _color:#00F;  /
只有IE6*/
}

MYSQL 最佳化設定實作教學

最近要接案子了…有可能還同時兩個一起接到…
這篇以後架站也許用的到吧0w0


MYSQL 最佳化設定實作教學

前 言:

MYSQL的設定參考文件很少,在網上查到了一些相關的原文調整說明,也去翻了翻mysql相關的書
我自己在整理資籵的時候也覺得很多東西寫不出來,所以有些地方可能會寫的不是很完整。

#以下設定適用於1024M-2048M記憶體及2顆CPU的MYSQLDB,如記憶體更大的話請自行做調整。給各項參數增加記憶體配置量會加快速度,但是使用過多的記憶體而導致啟用swap的話,會嚴重導致系統執行效率下降。

#沒有修改參數,用預設值的記憶體使用量:約 40MB,使用my-large.cnf,記憶體使用量:約420MB但是可以提高DB的存取執行效率。

– ————————————————————–設定說明—— ——————————————————-

GLOBAL MEMORY與 THREAD MEMORY
MYSQL 再配置記憶體時分成兩各階段,一是當SERVER啟動時配置給整個系統使用,二是當CLINT連線進來的時候配置給單一連線使用。前者被稱為GLOBAL 後者被稱為THREAD,MEMORY的總用量簡單的說就是GLOBAL+(THREAD數*THREAD MEMORY) 這個公式所算出來的記憶體消耗應該要小於系統的總記憶體(這是廢話當然要小於囉),但是實際上測試時,系統記憶體不足就會回應TOO MANY CONNECTION而暫停回應。但是大量的REQUEST很容易讓DB掛給你看。通常USED CONNECTION會大量增加,是因為TABLELOCK,導致新的QUERY被暫存,後來才發現減低TABLE LOCK的時間與次數,才是解決DB TIMEOUT卡死的方式。但是TABLE LOCK一般是因為SQL查詢寫的不好,可能需要調整程式裡的SQL語法,所以只好以縮短wait_timeout的時間做為應急的辦法。但是這會增加 CPU LOADING,所以調整要小心一點,慢慢TEST出最佳調整參數值。

TMP TABLE與TABLE CACHE
當 一個查詢所耗用的記憶體超過配置的BUFFER時,MYSQL會開啟暫存TABLE,暫存TABLE先放在記憶體中,記憶體不足再利用DISK,原理就像 是L1、L2、L3 CACHE。table_cache的參數定義了能夠CACHE多少個TABLE ,tmp_table_size是定義在記憶體中開?的暫存TABLE有多大,也就是說
,這是個全域的記憶體配置。TMP TABLE超過這個大小,就會被寫到硬碟上。 要比對這個參數是否太大要比較SHOW STATUS(mysql中查看運作狀況的指令)中的open_tables跟opened_tables數量,前者是目前所開啟的TABLE數,後者是 曾開啟的TABLE數,如果後者比前者大很多,表TABLE CACHE太小。可以試著調大數值。

wait_timeout
這個參數是由global wait_timeout 或是interactive_timeou繼承下來的。而且在COMMAND LINE時無法看到GLOBAL WAIT﹍TIMEOUT ,這個值會繼承自interactive_timeout 。

————–MY.CNF(調整前的設定沒有做最佳化設定,所以2G記憶體只給了約40M給MYSQL用)———–
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-innodb

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


—————————MY.CNF(調整後的設定,2G記憶體指定了512M左右給MYSQL用)———————–[mysqld]
skip-innodb <—如果不用到innodb數據表,去掉innodb支援,節省記憶體
skip-bdb <—如果不用到bdb數據表,去掉bdb支援,節省記憶體。
skip-locking <—關閉外部鎖定可以提高資料表存取性能。
skip-name-resolve <—關閉DNS反查動作 。

datadir=/DB/data <—資料存放位置。
socket=/var/lib/mysql/mysql.sock <—sock檔位置。

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log <—err-log存放位置。
pid-file=/var/run/mysqld/mysqld.pid <—PID檔位置。
open_files_limit=8192 <—允許MYSQL開啟系統檔案數上限。

[mysqld]
set-variable = back_log=50
set-variable = connect_timeout=10
set-variable = key_buffer=512M
set-variable = max_allowed_packet=4M
set-variable = table_cache=1024 <—允許暫存在CACHE裡的TABLE數量。
set-variable = thread_cache=64
set-variable = join_buffer_size=32M <—使用到JOIN時會用到,如果有大量Select動件時可視情況增加,提供執行效能。
set-variable = sort_buffer=32M <—用來排序的BUFFER,如果DB回傳大量的查詢結果而且又使用ORDER BY,增加這個BUFFER大小可以提升速度。
set-variable = record_buffer=32M
set-variable = max_connections=32000
set-variable = wait_timeout=120
set-variable = interactive_timeout=120 <—連線timeout時間。
set-variable = max_connect_errors=30000
set-variable = long_query_time=1
set-variable = max_heap_table_size=256M
set-variable = tmp_table_size=128M
set-variable = myisam_sort_buffer_size=128M
set-variable = max_allowed_packet=1M
set-variable = net_buffer_length=16K <—網路暫存BUFFER,TCP最大封包長度是16384。
set-variable = thread_concurrency=4 <—設置為你的cpu數目x2,例如,只有一個cpu,那麼thread_concurrency=2 <—有2個cpu,那麼thread_concurrency=4。

#set-variable = log_slow_queries=/var/log/log_slow_queries.log

#log-bin <—去掉log,提高性能。
server-id = 1

[isamchk]
set-variable = key_buffer=64M
set-variable = sort_buffer=64M
set-variable = read_buffer=16M
set-variable = write_buffer=16M

[myisamchk]
set-variable = key_buffer=64M
set-variable = sort_buffer=64M
set-variable = read_buffer=16M
set-variable = write_buffer=16M

[mysqldump]
quick
set-variable = max_allowed_packet=16M

[mysql]
no-auto-rehash

Remove the next comment character if you are not familiar with SQL

#safe-updates

[mysqlhotcopy]
interactive-timeout

來源:http://tw.myblog.yahoo.com/black-lulu/article?mid=148

專題進度10/17


設備連結進度70%
使用者介面進度70%

總算能從設備讀出像樣的東西了~

辛好和隔壁組比較起來快很多…大約是10%VS70%的差距

專題老師看到對面組臉大概綠了吧…哈

如果我當初被分派到另一組去…
程式八成都我在弄吧。。。。
組員們有你們在真好

話說今天被開了紅單$600………………………….

SQL API


Connection物件是代表Java與資料庫的連線
    Connection conn = DriverManager.getConnection(
                          url, user, password);

Statement物件執行SQL
    Statement stmt = conn.createStatement();

    新增:
    stmt.executeUpdate(“INSERT INTO message VALUES(‘主題’, 
                                                          '[email protected]‘, ‘留言內容’, ‘2008-8-29’)”);

ResultSet物件接收Statement物件的SQL結果

    ResultSet result =
                  stmt.executeQuery(“SELECT * FROM message”);
    while(result.next()) {
        System.out.print(result.getString(“name”) + “t”);
        System.out.print(result.getString(“email”) + “t”);
        System.out.print(result.getString(“subject”) + “t”);
        System.out.print(result.getString(“time”) + “t”);
        System.out.println(result.getString(“memo”) + “t”);
    }

    使用查詢到的結果之欄位順序來顯示結果的方式如下:
    ResultSet result =
                  stmt.executeQuery(“SELECT * FROM message”);
    while(result.next()) {
        System.out.print(result.getString(1) + “t”);
        System.out.print(result.getString(2) + “t”);
        System.out.print(result.getString(3) + “t”);
        System.out.print(result.getString(4) + “t”);
        System.out.println(result.getString(5) + “t”);
    }

介面 ResultSetMetaData 用於獲取關於 ResultSet 物件中列的型別和屬性資訊的物件。


創建 ResultSetMetaData 物件 rsmd,並使用 rsmd 尋找 rs 有多少列,以及 rs 中的第一列是否可以在 WHERE 子句中使用。

     ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");      ResultSetMetaData rsmd = rs.getMetaData();      int numberOfColumns = rsmd.getColumnCount();      boolean b = rsmd.isSearchable(1); 

專題進度09_06


爆炸了。

DLL檔能讀。

卡機函數還沒弄好。

JTABLE弄的亂七八糟。

PHP網頁設計中。

阿門。

[Java] 基本


當輸入javac出現

‘javac’ 不是內部或外部命令、
可執行的程式或批次檔。

我的電腦右鍵→內容→進階→環境變數

CLASSPATH.;自已需要的CLASS檔的資料夾路徑
                      /JAR檔路徑;
path加入 ;%JAVA_HOME%bin
JAVA_HOMEC:Program FilesJavajdk1.6.0_10

*視自已安裝的版本及路徑,善用ctrl+c / ctrl+v

PSPad的設定(以J2SE 6U1為例):
1.[語法/高亮度設定]
2.[Java/編譯器標籤頁]
   3.編譯器:C:Program FilesJavajdk1.6.0_01binjavac.exe
   4.參數:%Name%.java
   5.編譯之後執行:cmd /c  java %Name% && pause
   6.[勾選擷取程式的輸出結果]
7.[Java/規範標籤頁]
   8.套用的檔案類型: Java files
   9.Help檔:C:Program FilesJavajdk1.6.0_01wdocj2se6.chm
   10.副檔名遮罩:*.java

[Java] JNative

    網上最多的就是使用JNI調用dll的方法,試了試發現JNI和JNA方法對dll包的路徑都很嚴格,一般都是調用自己寫的dll檔案,要是調用已經寫好的就需要Java類的路徑和dll裡的路徑是一致的,不然能找到這個dll檔案也不能讀取裡面的內容,(我是這么理解的,因為我就沒成功,呵呵)只能自己再寫一個dll檔案調用你需要的那個已經有的檔案,然後在用java調用自己寫的這個dll檔案。
JAWIN和JNative是開源組件,使用這兩種方法可以直接調用寫好的dll檔案,Jawin 數據類型匹配相當敏感,它採用一種叫做”instruction string”的格式來傳遞參數,至今還沒學會。
我是使用JNative方法調用dll檔案。
需要下載一個JNative的壓縮包,

解壓獲得三個檔案,分別是︰JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。

    JNativeCpp.dll Windows下用的,拷到windows / system32目錄下;

    libJNativeCpp.so Linux下的格式檔案;

    JNative.jar 這是一個擴展包,將其copy到C:Javajre1.5.0lib下(我的目錄架構),系統會自動加載,也可以用eclipse直接加載。

方法︰




Class


作用


一般用到的方法
(**
参考Javadoc**)


org.xvolks.jnative.Jnative

裝載dll檔案,定位函數
JNative(),setParameter(),
setRetVal(),getRetVal() etc.


org.xvolks.jnative.pointers
.Pointer

替代本地函數中的的指標,需要先申請一塊記憶體空間,才能創建
Pointer(),dispose()


org.xvolks.jnative.
pointers.memory.
MemoryBlockFactory


申請一塊記憶體空間


createMemoryBlock()


org.xvolks.jnative.
exceptions
.NativeException


拋出裝載,定位等方面的異常


org.xvolks.jnative.Type


 列舉和管理Jnative需要的不同的數據類型



這個使用很簡單,參數設定也很自由

//首先加載dll和需要的方法

  JNative messageBox = new JNative(“dll_name.dll”, “method_name”);

//返回值數據類型
   messageBox.setRetVal(Type.INT);

//參數設定
   messageBox.setParameter(0, Type.STRING,”piserver”);

//營運
   messageBox.invoke();


====================================


取得回傳值 getRetVal()

TYPE

**[DOUBLE](http://jnative.free.fr/docs/org/xvolks/jnative/Type.html#DOUBLE)**
          Used for in params of type double
**[FLOAT](http://jnative.free.fr/docs/org/xvolks/jnative/Type.html#FLOAT)**
          Used for in params of type float
**[INT](http://jnative.free.fr/docs/org/xvolks/jnative/Type.html#INT)**
          Used for in params of type bool, byte to long (32 bits)
**[LONG](http://jnative.free.fr/docs/org/xvolks/jnative/Type.html#LONG)**
          Used for in params of type int64 (64 bits)
**[PSTRUCT](http://jnative.free.fr/docs/org/xvolks/jnative/Type.html#PSTRUCT)** (指標)
          Not use directly, use a Pointer(指標) object instead
This is used internaly for out parameters.
**[STRING](http://jnative.free.fr/docs/org/xvolks/jnative/Type.html#STRING)**
          Used for in params of type const char*, LPCSTR
**[VOID](http://jnative.free.fr/docs/org/xvolks/jnative/Type.html#VOID)**
          Used only for return values

 **

有指標時的用法

*

假設dllName.dll裡有
FuntionName(string str)
的方法

            JNative funDLL = new JNative(dllName.dll, “FuntionName”);
            funDLL.setRetVal(Type.INT);
            //参数设置
            Pointer pointer1 = new Pointer( new HeapMemoryBlock(50));
            //設定要預用多少記憶體空間來放指標
            pointer1.setStringAt(0 ,”指標初值”);
            //設定初值
            System.out.println(pointer1.getAsString()); //會印出 指標初值       
            funDLL.setParameter(0, pointer1);
            //運行dllFuntion
            funDLL.invoke();
           
            System.out.println(pointer1.getAsString());
            //印出指標的值

**

[Java] jawin 調用本地dll

最近做一個項目使用jawin調用本地的dll,給有關心得貼上來
步驟:
1.下載jawin:http://jawinproject.sourceforge.net/。
2.將jawin.jar放於%JAVA_HOME%jrelibext下 。
3.將jawin.dll放於c win32下。

import org.jawin.funcptr; 
import org.jawin.returnflags; 
public class createppt { 
       public static void main(string[] args) { 
              try { 
                     funcptr msgbox = new funcptr(“user32.dll”, “messageboxw”); //獲得函數指針
                     msgbox.invoke(0, “hello from a dll”, “from jawin”, 0, returnflags.fail_on_false); 
/*1.     指令字符串。一個”XXX:Y:ZZZ”格式的字符串。其含義分別是傳入參數中的每個字節的數據類型意義、返回值的類型、需要從傳入指針中讀取的數據(inout類型參數)。比如:

函數簽名int func(int, int, struct s, char); //其中struct s*調用完函數後需要讀出,struct s所占字節數為16。

其指令字符串為:IIP16G:I:L4L4n16L4。該字符串在解析返回值(字節數組)時,首先應該是返回類型I對應的4個字節,然後是inout類型的參數中n16對應的16個字節。

其中字符串的意義可以在Jawin提供的文件instructions.h中找到,或者在官方文檔(Jawin數據指令)中找到常用的一些指令字符串的意義。

2.     傳入參數的總字節大小。

3.     前面寫好的傳入參數的原始字節流。

4.     一個object數組。

5.     ReturnFlags,用以根據C/C++返回值將C/C++的錯誤轉換為Java的異常並拋出。其中CHECK_NONE表示不檢查;CHECK_FALSE和 CHECK_WIN32分別表示返回0是FALSE和SUCCESS,根據是否出錯決定是否拋出異常;CHECK_HRESULT表示使用COM模型中的 HRESULT作為返回值,其錯誤碼可以配置。

*/
              } catch (exception e) { 
                     e.printstacktrace(); 
              }