`
truelove12358
  • 浏览: 77555 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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

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:\ProgramFiles\MicrosoftSDKs\Windows\v7.0A\bin\NETFX4.0Tools

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







分享到:
评论

相关推荐

    C#打印维码全驱动.dll.zip

    本压缩包文件“C#打印维码全驱动.dll.zip”提供了必要的库和驱动,使得在Windows窗体应用程序中集成二维码打印变得简单易行。 首先,我们来了解一下其中包含的关键组件: 1. **BarcodeLib**: 这是一个专门用于生成...

    使用C#开发ActiveX控件全攻略

    【使用C#开发ActiveX控件全攻略】 ActiveX控件是Microsoft的一种技术,它基于组件对象模型(Component Object Model,简称COM),在分布式环境中,COM可以转变为分布式COM(DCOM)。ActiveX控件最初是为了对抗Sun ...

    金税接口调用实例

    本实例主要关注使用C#语言调用金税接口,通过一个名为`Interop.TaxCardX.dll`的组件来完成相关操作。`Interop.TaxCardX.dll`是一个COM组件,允许.NET环境下的C#代码与非托管的金税接口进行交互。 首先,我们需要...

    海康工业相机二次开发demo

    在这个过程中,你需要创建Java层的调用接口,编写本地方法,在JNI头文件中声明,然后在C++中实现具体的相机控制功能。 在CH-HCNetSDKV6.1.4.6_build20191220_Win64这个压缩包文件中,包含了海康最新的SDK版本,这是...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    C#语言基础共277页.doc

    C#语言的优点是完全面向对象的,不像C++语言,即支持面向过程程序设计,又支持面向对象程序设计,在C#中不再存在全局函数、全区变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。C#语言不支持多重...

    C#开源资源大汇总很不错

    - **简介**:tBlogger 是一个使用 C# 构建的博客站点。 - **特点**:使用 XML 来存储数据,易于扩展。 #### 六、压缩相关资源 **1. .NETZ** - **简介**:.NETZ 是一个压缩工具,可以压缩 .NET 应用程序的 EXE 和 ...

    VMWare API 开发指南

    综上所述,VMWare API 开发指南为开发者提供了搭建VMware vSphere Web Services SDK开发环境的详细步骤,涵盖了从环境搭建、软件下载、代码示例到用户反馈的全过程。开发者在遵循指南进行VMware vSphere的API开发时...

    C#开源资源大汇总.txt

    ### C#开源资源大汇总知识点解析 #### 一、面向切面编程(AOP)工具与框架 在C#开源资源大汇总中,首先提到的是面向切面编程(AOP)的相关工具和框架。AOP是一种软件开发技术,用于将跨越多个对象的行为分离出来,...

    LED_灵信led开发_LED_

    以上是LED显示屏开发的一些主要知识点,涵盖了从硬件到软件的全过程。在实际项目中,开发者需要具备跨领域的知识和技能,才能成功地完成LED显示屏的开发。而“灵信led开发”可能提供了特定的开发工具和平台,简化了...

    数据库-国产数据库-达梦数据库-DM8-文档及驱动程序包

    1. 用户手册:详细介绍了DM8的安装、配置、管理和维护过程,帮助用户快速上手。 2. 开发指南:为开发人员提供API接口和编程语言的使用方法,如JDBC、ODBC等驱动的使用。 3. SQL参考:涵盖DM8支持的所有SQL语法,便于...

    自动化测试全套工具之三_Extra.zip

    自动化测试是现代软件开发过程中的重要环节,它能够有效地提高测试效率,减少人工错误,并确保产品质量。本资源“自动化测试全套工具之三_Extra.zip”提供了实现自动化测试所需的一些关键组件,包括Java开发工具包...

    百付宝支付文档

    总结来说,"百付宝支付文档"为不同平台的开发者提供了详尽的支付集成指南,涵盖了从创建支付请求到处理回调的全过程,帮助开发者顺利接入百度支付系统,提升用户体验并保障交易安全。在实际开发过程中,开发者应仔细...

    Grid++Report6.7.2.zip

    Oracle数据库驱动程序是连接到Oracle数据库的关键组件,它实现了ODBC(Open Database Connectivity)或JDBC(Java Database Connectivity)标准,使得应用程序能够通过标准接口访问Oracle数据库。这允许开发人员在...

    基于Asp的音乐网站源码.zip

    尽管标题中只提及了Asp,但这些标签暗示这个项目可能采用了多种技术栈,例如,前端可能使用了Asp,后端可能涉及C#或Java,以及可能使用了Asp.net框架。 【压缩包子文件的文件名称列表】提到的"源程序"可能是指一...

    Aspose.CellsApi中文版文档

    Aspose.CellsApi 是一个强大的API,主要用于处理Excel文件的操作。这个API支持Java和C#两种编程语言,提供了丰富...不过,需要注意的是,由于文档可能不全,使用过程中可能需要参考官方文档或社区资源以获取完整信息。

    TSC打印机windows二次开发全套控件

    5. **开发语言支持**:TSC的二次开发控件通常会支持多种编程语言,如C++、C#、VB.NET、Java等。开发者可以根据自己的熟练程度和项目需求选择合适的语言进行开发。 6. **示例代码和文档**:在二次开发过程中,TSC...

    动态库全-实例.rar

    1. **示例代码**:可能包含各种编程语言(如C++、C#、Java)的实例,展示了如何在程序中调用动态库中的函数。 2. **API文档**:详细解释了动态库提供的接口和功能,帮助开发者了解如何正确使用库。 3. **编译和链接...

    CODE128Auto条码打印

    - 使用编程语言(可能是Python、Java、C#等)实现条码生成,首先需要定义每个字符的条码图案,然后根据输入数据计算对应的条码编码。 - 数据编码过程包括将ASCII字符转换为相应的条码编码,每种字符由多个宽窄不等...

Global site tag (gtag.js) - Google Analytics