仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1055|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA编程:怎样用Java挪用C#写的带事务的COM接口仓酷云

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:31:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。前两天公司有这么个需求:用C#写一个COM组件,供应接口让Java来挪用,完成Java和C#之间的接口通讯。如许子倒好办,我用C#写一个COM组件也就是几分钟的事变,Java也能够用jacob十分便利地挪用C#写好的COM接口。可是对方java项目组又请求我在C#COM接口中界说一系列事务,由java端完成事务的详细办法,换句话说我不但要完成客户端(java端)挪用服务端(c#com端),并且又要经由过程事务机制完成服务端挪用客户端。如今把详细完成的历程纪录上去,供本人从此查阅,也供碰到一样成绩的伴侣查阅,但愿能给必要的伴侣带来匡助。
1、C#编写带事务机制的COM组件
起首我们新建一个类库项目叫做COM_Tester,右键点击工程->使用程序->程序集信息->使程序集com可见,打上勾,以下图所示:

<br>
右键点击工程->天生->为comInterop注册打上勾

<br>
好了,如许设置今后我们静态库就能够以COM的情势注册到注册表了,也就是说java能够看到这些接口并挪用了,那接上去就是来写COM接口了。
起首界说COM接口,C#代码以下:
1
2
3
4
5
6
7
[Guid("7EEDF2D8-836C-4294-90A0-7A144ADC93F9")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
publicinterfaceITester
{
[DispId(1)]
voidDraw(stringtext);
}

注重,这里的Guid值能够经由过程点击工具->创立GUID->选择4->NewGuid->copy->粘贴到别的就行
因为必要用到事务机制,我们再来界说事务接口,C#代码以下:
1
2
3
4
5
6
7
[Guid("7FE32A1D-F239-45ad-8188-89738C6EDB6F")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
publicinterfaceIEventTester
{
[DispId(2)]
voidDrawEvent(stringtext);
}

然后我们来界说一个类来完成ITester接口作为COM接口的主类,C#代码以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[Guid("76BBA445-7554-4308-8487-322BAE955527"),
ClassInterface(ClassInterfaceType.None),
ComDefaultInterface(typeof(ITester)),
ComSourceInterfaces(typeof(IEventTester)),
ComVisible(true)]
publicclassMyCom:ITester
{
publicdelegatevoidDrawDelegate(stringtext);
//注重事务的称号必需和IEventTester界说的名字分歧,并且必需public
publiceventDrawDelegateDrawEvent;
#regionITester成员
publicvoidDraw(stringtext)
{
OnDraw(text);
Console.WriteLine("Iamdrawing...");
}
publicvoidOnDraw(stringtext)
{
if(DrawEvent!=null)
DrawEvent(text);
}
#endregion
}

好了,带事务的COM接口就写好了。
2、Java端使用jacob来挪用COM并将java写的事务呼应函数传送给COM
怎样利用jacob,能够参看http://danadler.com/jacob/,这里就不具体先容了。
Java代码以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
importcom.jacob.activeX.ActiveXComponent;
importcom.jacob.com.Dispatch;
importcom.jacob.com.DispatchEvents;
importcom.jacob.com.Variant;
publicclassJavaTester{
publicstaticvoidmain(String[]args){
ActiveXComponentdotnetCom=newActiveXComponent("COM_Tester.MyCom");
Dispatchtest=(Dispatch)dotnetCom.getObject();
SensorEventsse=newSensorEvents();
DispatchEventsde=newDispatchEvents(test,se);
Dispatch.call(test,"Draw",newVariant("123"));
}
}

1
2
3
4
5
6
7
8
9
importcom.jacob.com.Variant;
publicclassSensorEvents{
publicvoidOnDraw(Variant[]i){
System.out.println("thisisjavaeventexecuted");
}
}

注重:OnDraw事务称号要与C#界说的OnDraw分歧,如许jacob会主动寻早婚配的事务;参数要用Variant[]范例,那次我由于用了Variant分歧没法乐成。
好了,如许我们就可以乐成完成Java挪用带事务的C#COM接口了,但愿能给人人带来匡助。

有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。
老尸 该用户已被删除
沙发
发表于 2015-1-21 09:33:34 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
莫相离 该用户已被删除
板凳
发表于 2015-1-29 14:40:36 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
只想知道 该用户已被删除
地板
发表于 2015-1-30 10:58:25 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
活着的死人 该用户已被删除
5#
发表于 2015-2-1 16:29:52 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
谁可相欹 该用户已被删除
6#
发表于 2015-2-5 11:42:01 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
山那边是海 该用户已被删除
7#
发表于 2015-2-6 02:34:06 | 只看该作者
是一种突破用户端机器环境和CPU
爱飞 该用户已被删除
8#
发表于 2015-2-15 01:45:45 | 只看该作者
是一种突破用户端机器环境和CPU
9#
发表于 2015-3-4 10:51:47 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
兰色精灵 该用户已被删除
10#
发表于 2015-3-6 19:45:59 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
透明 该用户已被删除
11#
发表于 2015-3-11 13:41:30 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
因胸联盟 该用户已被删除
12#
发表于 2015-3-15 09:41:46 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
飘灵儿 该用户已被删除
13#
发表于 2015-3-17 07:11:29 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
小魔女 该用户已被删除
14#
发表于 2015-4-3 00:36:08 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
再现理想 该用户已被删除
15#
发表于 2015-4-8 19:25:17 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
金色的骷髅 该用户已被删除
16#
发表于 2015-4-11 07:20:40 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
admin 该用户已被删除
17#
发表于 2015-4-11 17:40:16 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
飘飘悠悠 该用户已被删除
18#
发表于 2015-4-21 11:21:34 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
愤怒的大鸟 该用户已被删除
19#
发表于 2015-4-22 08:08:56 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-18 14:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表