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:
或 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 ,就須要使用VisualStudio的CommandPrompt,前提是須要安裝VisualStudio,可是客戶端上通常是沒有安裝VS的,因此你就須要將gacutil的文件夾拷貝到部署的客戶機上。在C盤搜索gacutil.exe,咱們會搜索到三個文件,其中有一個是正確的,路徑以下:
1. C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools
(這是WIN7,VS2010環境下)。裏面就有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調用呢。