Java调用C#dll全过程


Java调用C#dll全过程

Java调用默认邮件程序(Windows live mail & IBM Lotus)的同时加上附件

目录 ——看目录者,原地满血满蓝复活!

1.吐槽Java

2.实现的功能描述及概述

3.Java调用C# dll 步骤

4.总结

-----------------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------


写在前面:着急找Java调用C#步骤的,请无视其他部分,直接跳到Part 3


---------------------------------------------------------------------------------1.吐槽Java------------------------------------------------------------------------------------

1.吐槽Java

为了实现一个Java调用默认邮件程序(Windows live mail & IBM Lotus)的同时加上附件的简单功能,查了一个星期的百度 google。尝试使用Java调用C++实现,无奈C++不懂,找别人写的代码说要用MFC才能实现,Java调用win32 dll还好,调用MFC是一团麻。终于在codeproject网下载C#&VB可以实现调用默认邮件程序加附件的功能,问题又来了,Java调用C#步骤有点复杂,调用成功后还要在客户机注册。尝试过使用Java.awt.desktop mail(URI uri)方法实现,不能添加附件;Javamail 是后台写邮件,不符合需求;使用开源项目JDIC调用,JDIC对browser支持还好,对email程序,不支持。经过了这些,发现Java对桌面应用的支持很差,也没有开源项目研究Java调用桌面应用的插件(有个JDIC,08年就不更新了)。所以,如果想用Java调用桌面应用的话,你会发现是一件很痛苦的事情,你需要使用JNI或者JNA调用C/C++/C#写的DLL,间接实现,还要考虑兼容等问题。目前看来,Java的定位是web服务器端应用开发,对桌面应用的支持已经不做关心了,要操作桌面应用还是用C++/C#实现吧。




------------------------------------------------------------------2.实现的功能描述及概述-------------------------------------------------------------------------------

2.实现的功能描述及概述

实现的功能:Java调用默认邮件程序(Windows live mail & IBM Lotus)发邮件,同时添加附件。

概述:查了很多网站,内容就不copy过来了,有参考资料的地方就给链接。可能会有些小标题,请自行研究。

关于java为何不能直接调用C#DLL(引用别人写的一句话):

C#COM组件是一个DLL形式的文件,那么能不能像其他DLL一样如系统 kernel32.dll直接在C代码(或C++代码)中使用呢?也就是不通过COM的封装而是直接使用。这样做是行不通的。因为C#的类库必然是托管类库,虽然文件扩展名也是DLL,但它不是一种传统意义上的DLL,例如没有输出表,所以得经过COM封装才能给非托管代码使用。至于托管代码使用托管DLL C#调用C#写的类库那就没必要经过COM的封装了。




---------------------------------------------------------------------3.Java调用C# dll 步骤---------------------------------------------------------------------------------


Step 1:

Java调用C#com方法

http://download.csdn.net/detail/truelove12358/5923893

或 http://wenku.baidu.com/view/1a2551639b6648d7c1c746f9.html

这里要说的是:按照步骤来就没问题。可能遇到的问题com注册的问题,Visual Studio Command Prompt 命令行在Visual Studio 2010》tools》Visual Studio Command Prompt 。执行gacutil -i 或regasm命令时 dll路径请写绝对路径,如果路径中有空格请用双引号引起来。

用VS2010,先对着文章里面的代码copy过去做个Demo调试出来。

推荐使用JNA,因为JNA一直在更新。

如果JNA调用C++ dll 出问题的,同样请先参照资料写个JNA Helloworld

http://songwensheng.iteye.com/blog/675270

JNA官网https://github.com/twall/jna


Step 2:需要什么接口模仿Demo的写法自行改代码,再次按照Step 1里的资料做成自己要的东西。


这里公布下C#&VB调用默认邮件程序同时加附件的源码地址:

http://download.csdn.net/detail/truelove12358/5923861

http://www.codeproject.com/Articles/17561/Programmatically-adding-attachments-to-emails-in-C

获取源码后请读Step 2


Step 3:对于C#非纯正dll的在客户机上的注册

如果以上两步都做好了,不要兴奋的太早了,对于C#非纯正dll的在客户机上的注册还是个问题。

如果你已经按照Step 1中的资料做了一遍了,你会发现需要用Visual Studio Command Prompt 进行

gacutil -i 和regasm命令注册com组件。

对于GAC全局程序集缓存 喜欢历史的请看这里

http://blog.csdn.net/ghj1976/article/details/5529745

目前NetFrameWork4.5的注册方式

http://msdn.microsoft.com/zh-CN/library/yf1d93sz.aspx

有两种方法可以将程序集部署到全局程序集缓存中:

  • 使用专用于全局程序集缓存的安装程序。该方法是将程序集安装到全局程序集缓存的首选方法。

  • 使用 Windows 软件开发包 (SDK) 提供的名为全局程序集缓存工具 (Gacutil.exe)的开发工具。

C# COM 组件添加到GAV(全局程序集缓存) + 注册——正解在此

Stepone:GAV path: C:\Program Files\MicrosoftSDKs\Windows\v7.0A\bin

如果我们需要用gacutil去注册dll,就需要使用VisualStudioCommandPrompt,前提是需要安装VisualStudio,但是客户端上一般是没有安装VS的,所以你就需要将gacutil的文件夹拷贝到部署的客户机上。在C盘搜索gacutil.exe,我们会搜索到三个文件,其中有一个是正确的,路径如下:

1.C:\ProgramFiles\MicrosoftSDKs\Windows\v7.0A\bin\NETFX4.0Tools

(这是WIN7VS2010环境下)。里面就有gacutil.exe

Steptwo: regasm 注册

Regasm myDll.dll

令附两个文件下载地址:

http://download.csdn.net/detail/truelove12358/5923843

http://download.csdn.net/detail/truelove12358/5923821

---------------------------------------------------------------------------------------------4.总结---------------------------------------------------------------------------------

4.总结

经过“3.Java调用C# dll 步骤”你应该已经了解了,Java调用C# com组件之麻烦了,我的建议是,如果可以用C++的还是用C++来实现然后用java调用吧。


疑惑:如果不将C# com 注册为GAC,有没有办法在C++封装后让java调用呢。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值