目前所做java项目中有部分模块需要使用客户提供的dll动态库文件中封装的算法,客户提供了一个dll文件以及C#语言编写的可执行文件实例,算法具体代码未提供。之前只涉及过利用jna调用c++所生成的dll文件,最终的目的则是需要java调用C#生成的dll文件。
本人涉及dll的封装操作不是很久,暂时未能找到java利用jna调用C#生成的dll的更有效方法,于是采用一种变通的方法。
这种方法的思路是:c++项目设置为clr公共运行时,可以通过引用的方法调用C#相应方法,java可以通过jna调用c++生成的dll,所以首先需要将C#的dll封装成c++的dll,再通过jna调用封装好的c++的dll文件。
工具:vs2010
首先,生成C#的dll文件。
客户给的dll文件是直接由C#生成的,如果熟悉这dll文件的内部结构则可直接略过此步骤。因为客户给的dll命名空间不够明确,并且其中有两个相似的类,而每个类下又有功能相同且名称相同的几个方法,为了能够明确调用给定的C#的dll动态库文件中的方法,同时为了c++调用方便,这里是将客户给的dll文件利用C#重新封装了一层。步骤如下。
1) 打开vs2010,新建项目,选择C#语言下的“类库”,填写项目名称。

本文介绍了如何在Java项目中利用JNA调用C#生成的DLL文件。由于直接调用C# DLL存在困难,作者采取了先用C++封装C# DLL,然后通过JNA调用封装后的C++ DLL的方法。详细步骤包括创建C#类库项目,设置COM可见性,添加客户DLL引用,生成C# DLL,接着创建C++项目,引入C# DLL,编写C++代码进行封装,最后在Java中使用JNA调用新生成的C++ DLL。注意,C# DLL需要放在JDK的bin目录下以避免加载错误。
最低0.47元/天 解锁文章
4247

被折叠的 条评论
为什么被折叠?



