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调用呢。