目录

Java调用Cdll全过程

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方法

这里要说的是:按照步骤来就没问题。可能遇到的问题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

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

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

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

获取源码后请读Step 2

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

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

还是个问题。

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

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

对于GAC

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

目前NetFrameWork4.5的注册方式

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

  • 使用专用于全局程序集缓存的安装程序。

    该方法是将程序集安装到全局程序集缓存的首选方法。

  • 使用 Windows 软件开发包 (SDK) 提供的名为 的开发工具。

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

——正解在此

Stepone:GAV   path:

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

如果我们需要用

gacutil

去注册

dll

,就需要使用

VisualStudio

CommandPrompt,

前提是需要安装

VisualStudio

,但是客户端上一般是没有安装

VS

的,所以你就需要将

gacutil

的文件夹拷贝到部署的客户机上。在

C

盘搜索

gacutil.exe

,我们会搜索到三个文件,其中有一个是正确的,路径如下:

C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools

(这是

WIN7

VS2010

环境下)。里面就有

gacutil.exe

Steptwo:

regasm

注册

Regasm myDll.dll

令附两个文件下载地址:




4.总结




4.总结

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

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