Java调用C#dll全过程


Java调用C#dll全过程
html

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

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

1.吐槽Javagithub

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

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:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools   

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