风之语
posts(201)
comments(182)
trackbacks(1)
BlogJava
联系
聚合
管理
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
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)
数据仓库(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网站压力测试
2. Vm虚拟机访问本地硬盘文件
3. NFS文件无法写入的权限问题
4. weblogic设置上传文件访问权限
5. 在android上动态实现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
搜索
积分与排名
积分 - 399196
排名 - 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 使用笔记
怎么没一个人留言,现在来是不是在挖坟啊
--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
风
阅读(875)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理