風之語
posts(201)
comments(182)
trackbacks(1)
BlogJava
聯(lián)系
聚合
管理
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
給我留言
查看公開留言
查看私人留言
隨筆分類
ajax(1)
android(1)
apache(1)
AppFuse(1)
BIRT(1)
iText(1)
JSF(8)
kettle(1)
linux(5)
mac(1)
maven(1)
MSTR(3)
Open XML(1)
Oracle(21)
RCP
Struts(2)
Struts2(2)
SybaseIQ(6)
tapestry
tomcat(2)
weblogic(1)
webservice(1)
weka(1)
云計算(1)
收藏(31)
數(shù)據(jù)倉庫(11)
架構設計(3)
生活(2)
集群(1)
項目管理(6)
隨筆檔案
2012年12月 (4)
2012年11月 (1)
2012年7月 (2)
2011年8月 (1)
2011年7月 (1)
2011年3月 (1)
2010年12月 (2)
2010年11月 (4)
2010年10月 (3)
2010年9月 (5)
2010年8月 (1)
2010年7月 (4)
2010年3月 (1)
2010年2月 (3)
2009年12月 (3)
2009年11月 (4)
2009年9月 (3)
2009年6月 (5)
2009年5月 (3)
2009年4月 (2)
2009年3月 (5)
2009年2月 (4)
2009年1月 (2)
2008年11月 (2)
2008年9月 (1)
2008年7月 (2)
2008年6月 (4)
2008年5月 (6)
2008年4月 (1)
2008年3月 (1)
2007年12月 (2)
2007年11月 (5)
2007年10月 (2)
2007年9月 (3)
2007年8月 (3)
2007年4月 (1)
2007年3月 (2)
2007年2月 (2)
2007年1月 (2)
2006年12月 (3)
2006年8月 (2)
2006年7月 (2)
2006年6月 (2)
2006年4月 (2)
2006年3月 (1)
2006年2月 (3)
2006年1月 (6)
2005年12月 (6)
2005年11月 (4)
2005年10月 (17)
2005年9月 (25)
2005年8月 (16)
2005年7月 (8)
相冊
技術圖片
收藏夾
java
link
My wife
My wife's blog
最新隨筆
1.?apache修改最大連接并用ab網(wǎng)站壓力測試
2.?Vm虛擬機訪問本地硬盤文件
3.?NFS文件無法寫入的權限問題
4.?weblogic設置上傳文件訪問權限
5.?在android上動態(tài)實現(xiàn)ichartjs的3D柱形圖
6.?使用Oracle trunc 來指定精確的年月日時分秒
7.?Quartz 2.1.5 web應用配置
8.?LoginAny 使用筆記
9.?MyEclipse 無響應的幾種解決辦法
10.?java.sql.SQLException: No more data to read from socket
搜索
積分與排名
積分 - 401965
排名 - 139
最新評論
1.?re: 使用Oracle trunc 來指定精確的年月日時分秒[未登錄]
政治
--張三
2.?re: 干掉流氓軟件vrvrf_c.exe,vrvedp_m.exe[未登錄]
`
--1
3.?re: 無需刻錄DMG光盤,教你在VMWare下安裝MAC OS X Snow Leopard 10.6
我走到了換DMG映像的時候,然后就沒有反應了,這個是什么情況,是不是我的映像文件有問題,還是。。。。
--玉竹常青
4.?re: LoginAny 使用筆記
怎么沒一個人留言,現(xiàn)在來是不是在挖墳啊
--ellipse
5.?MSTR web應用的部署[未登錄]
請問,如何用oracle Application Server服務器部署mstr web應用?
--rocky
閱讀排行榜
評論排行榜
View Post
如何在Java內讀取COM接口中所有的方法和屬性
package
com.bovy.officehelper;
import
org.eclipse.swt.SWT;
import
org.eclipse.swt.SWTException;
import
org.eclipse.swt.internal.ole.win32.TYPEATTR;
import
org.eclipse.swt.ole.win32.OLE;
import
org.eclipse.swt.ole.win32.OleAutomation;
import
org.eclipse.swt.ole.win32.OleControlSite;
import
org.eclipse.swt.ole.win32.OleFrame;
import
org.eclipse.swt.ole.win32.OleFunctionDescription;
import
org.eclipse.swt.ole.win32.OlePropertyDescription;
import
org.eclipse.swt.widgets.Shell;
public
class
COMLister
...
{
public
static
void
main(String[] args)
...
{
if
(args.length
==
0
)
...
{
System.out.println(
"
Usage: java COMLister <program id>
"
);
return
;
}
String progID
=
args[
0
];
Shell shell
=
new
Shell();
OleFrame frame
=
new
OleFrame(shell, SWT.NONE);
OleControlSite site
=
null
;
OleAutomation auto
=
null
;
try
...
{
site
=
new
OleControlSite(frame, SWT.NONE, progID);
auto
=
new
OleAutomation(site);
}
catch
(SWTException ex)
...
{
System.out.println(
"
Unable to open type library for
"
+
progID);
return
;
}
TYPEATTR typeattr
=
auto.getTypeInfoAttributes();
if
(typeattr
!=
null
)
...
{
if
(typeattr.cFuncs
>
0
)
System.out.println(
"
Functions for
"
+
progID
+
"
:
"
);
for
(
int
i
=
0
; i
<
typeattr.cFuncs; i
++
)
...
{
OleFunctionDescription data
=
auto.getFunctionDescription(i);
String argList
=
""
;
int
firstOptionalArgIndex
=
data.args.length
-
data.optionalArgCount;
for
(
int
j
=
0
; j
<
data.args.length; j
++
)
...
{
argList
+=
"
[
"
;
if
(j
>=
firstOptionalArgIndex)
argList
+=
"
optional,
"
;
argList
+=
getDirection(data.args[j].flags)
+
"
]
"
+
getTypeName(data.args[j].type)
+
"
"
+
data.args[j].name;
if
(j
<
data.args.length
-
1
)
argList
+=
"
,
"
;
}
System.out.println(getInvokeKind(data.invokeKind)
+
"
(id =
"
+
data.id
+
"
) :
"
+
"
Signature :
"
+
getTypeName(data.returnType)
+
"
"
+
data.name
+
"
(
"
+
argList
+
"
)
"
+
"
Description :
"
+
data.documentation
+
"
Help File :
"
+
data.helpFile
+
"
"
);
}
if
(typeattr.cVars
>
0
)
System.out.println(
"
Variables for
"
+
progID
+
"
:
"
);
for
(
int
i
=
0
; i
<
typeattr.cVars; i
++
)
...
{
OlePropertyDescription data
=
auto.getPropertyDescription(i);
System.out.println(
"
PROPERTY (id =
"
+
data.id
+
"
) :
"
+
"
Name :
"
+
data.name
+
"
Type :
"
+
getTypeName(data.type)
+
"
"
);
}
}
auto.dispose();
shell.dispose();
}
private
static
String getTypeName(
int
type)
...
{
switch
(type)
...
{
case
OLE.VT_BOOL:
return
"
boolean
"
;
case
OLE.VT_R4:
return
"
float
"
;
case
OLE.VT_R8:
return
"
double
"
;
case
OLE.VT_I4:
return
"
int
"
;
case
OLE.VT_DISPATCH:
return
"
IDispatch
"
;
case
OLE.VT_UNKNOWN:
return
"
IUnknown
"
;
case
OLE.VT_I2:
return
"
short
"
;
case
OLE.VT_BSTR:
return
"
String
"
;
case
OLE.VT_VARIANT:
return
"
Variant
"
;
case
OLE.VT_CY:
return
"
Currency
"
;
case
OLE.VT_DATE:
return
"
Date
"
;
case
OLE.VT_UI1:
return
"
unsigned char
"
;
case
OLE.VT_UI4:
return
"
unsigned int
"
;
case
OLE.VT_USERDEFINED:
return
"
UserDefined
"
;
case
OLE.VT_HRESULT:
return
"
int
"
;
case
OLE.VT_VOID:
return
"
void
"
;
case
OLE.VT_BYREF
|
OLE.VT_BOOL:
return
"
boolean *
"
;
case
OLE.VT_BYREF
|
OLE.VT_R4:
return
"
float *
"
;
case
OLE.VT_BYREF
|
OLE.VT_R8:
return
"
double *
"
;
case
OLE.VT_BYREF
|
OLE.VT_I4:
return
"
int *
"
;
case
OLE.VT_BYREF
|
OLE.VT_DISPATCH:
return
"
IDispatch *
"
;
case
OLE.VT_BYREF
|
OLE.VT_UNKNOWN:
return
"
IUnknown *
"
;
case
OLE.VT_BYREF
|
OLE.VT_I2:
return
"
short *
"
;
case
OLE.VT_BYREF
|
OLE.VT_BSTR:
return
"
String *
"
;
case
OLE.VT_BYREF
|
OLE.VT_VARIANT:
return
"
Variant *
"
;
case
OLE.VT_BYREF
|
OLE.VT_CY:
return
"
Currency *
"
;
case
OLE.VT_BYREF
|
OLE.VT_DATE:
return
"
Date *
"
;
case
OLE.VT_BYREF
|
OLE.VT_UI1:
return
"
unsigned char *
"
;
case
OLE.VT_BYREF
|
OLE.VT_UI4:
return
"
unsigned int *
"
;
case
OLE.VT_BYREF
|
OLE.VT_USERDEFINED:
return
"
UserDefined *
"
;
}
return
"
unknown
"
+
type;
}
private
static
String getDirection(
int
direction)
...
{
String dirString
=
""
;
boolean
comma
=
false
;
if
((direction
&
OLE.IDLFLAG_FIN)
!=
0
)
...
{
dirString
+=
"
in
"
;
comma
=
true
;
}
if
((direction
&
OLE.IDLFLAG_FOUT)
!=
0
)
...
{
if
(comma)
dirString
+=
"
,
"
;
dirString
+=
"
out
"
;
comma
=
true
;
}
if
((direction
&
OLE.IDLFLAG_FLCID)
!=
0
)
...
{
if
(comma)
dirString
+=
"
,
"
;
dirString
+=
"
lcid
"
;
comma
=
true
;
}
if
((direction
&
OLE.IDLFLAG_FRETVAL)
!=
0
)
...
{
if
(comma)
dirString
+=
"
,
"
;
dirString
+=
"
retval
"
;
}
return
dirString;
}
private
static
String getInvokeKind(
int
invKind)
...
{
switch
(invKind)
...
{
case
OLE.INVOKE_FUNC:
return
"
METHOD
"
;
case
OLE.INVOKE_PROPERTYGET:
return
"
PROPERTY GET
"
;
case
OLE.INVOKE_PROPERTYPUT:
return
"
PROPERTY PUT
"
;
case
OLE.INVOKE_PROPERTYPUTREF:
return
"
PROPERTY PUT BY REF
"
;
}
return
"
unknown
"
+
invKind;
}
}
posted on 2008-05-18 09:15
風
閱讀(882)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © 風
主站蜘蛛池模板:
大理市
|
札达县
|
旌德县
|
台山市
|
水城县
|
南昌县
|
义马市
|
洛阳市
|
叙永县
|
文水县
|
泾川县
|
蓬莱市
|
大名县
|
濮阳县
|
白沙
|
宝应县
|
平塘县
|
九江县
|
聊城市
|
贵州省
|
阳原县
|
平阳县
|
浦城县
|
乐都县
|
高尔夫
|
柏乡县
|
绥化市
|
丹东市
|
南安市
|
嘉善县
|
洛隆县
|
惠水县
|
阿克陶县
|
兴安盟
|
抚顺市
|
贺兰县
|
隆回县
|
大兴区
|
上高县
|
黔西
|
南安市
|