風(fēng)之語
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)
云計(jì)算(1)
收藏(31)
數(shù)據(jù)倉庫(11)
架構(gòu)設(shè)計(jì)(3)
生活(2)
集群(1)
項(xiàng)目管理(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)
相冊
技術(shù)圖片
收藏夾
java
link
My wife
My wife's blog
最新隨筆
1.?apache修改最大連接并用ab網(wǎng)站壓力測試
2.?Vm虛擬機(jī)訪問本地硬盤文件
3.?NFS文件無法寫入的權(quán)限問題
4.?weblogic設(shè)置上傳文件訪問權(quán)限
5.?在android上動(dòng)態(tài)實(shí)現(xiàn)ichartjs的3D柱形圖
6.?使用Oracle trunc 來指定精確的年月日時(shí)分秒
7.?Quartz 2.1.5 web應(yīng)用配置
8.?LoginAny 使用筆記
9.?MyEclipse 無響應(yīng)的幾種解決辦法
10.?java.sql.SQLException: No more data to read from socket
搜索
積分與排名
積分 - 401967
排名 - 139
最新評論
1.?re: 使用Oracle trunc 來指定精確的年月日時(shí)分秒[未登錄]
政治
--張三
2.?re: 干掉流氓軟件vrvrf_c.exe,vrvedp_m.exe[未登錄]
`
--1
3.?re: 無需刻錄DMG光盤,教你在VMWare下安裝MAC OS X Snow Leopard 10.6
我走到了換DMG映像的時(shí)候,然后就沒有反應(yīng)了,這個(gè)是什么情況,是不是我的映像文件有問題,還是。。。。
--玉竹常青
4.?re: LoginAny 使用筆記
怎么沒一個(gè)人留言,現(xiàn)在來是不是在挖墳啊
--ellipse
5.?MSTR web應(yīng)用的部署[未登錄]
請問,如何用oracle Application Server服務(wù)器部署mstr web應(yīng)用?
--rocky
閱讀排行榜
評論排行榜
View Post
如何在Java內(nèi)讀取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
風(fēng)
閱讀(882)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © 風(fēng)
主站蜘蛛池模板:
崇明县
|
临澧县
|
新邵县
|
茌平县
|
崇信县
|
喀什市
|
保靖县
|
惠东县
|
齐河县
|
宜川县
|
巫溪县
|
榆社县
|
庄河市
|
思茅市
|
赤峰市
|
内黄县
|
洛隆县
|
涞源县
|
金山区
|
田东县
|
高雄县
|
吉木乃县
|
图木舒克市
|
南漳县
|
合作市
|
云霄县
|
安义县
|
福清市
|
开阳县
|
乌什县
|
陆良县
|
凤凰县
|
彭泽县
|
叶城县
|
开阳县
|
海宁市
|
南和县
|
石首市
|
宁武县
|
中江县
|
大港区
|