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

相關文章
相關標籤/搜索