业务需求Java要与第三方对接。第三方系统为asp.net开发,对外的接口也是webservice。但是请求参数和上传数据都需要用第三方给的dll动态类库加密。所以就有了这样的需求 java调用dll。
网上的资料N多,找了两天。最后感觉用jna比较方便 也灵活。但是按照网上的配置做dll调用的时候报各种错误,找不到方法程序等等。问题汇总如下:
-
首先 jna是不能直接调用.net的dll的,需要将.net的dll 通过c++做一个转换再使用(切记,此处爬坑好久)
-
确认使用系统32 || 64位,所调用的dll是32 || 64。
必须要做到一致 要不然就会报错。第三方给的dll是32位,但是我本机系统是64。解决办法:将dll反编译后 使用vs转换为64位dll。
反编译软件:Reflector(有绿色版)该软件也可以查看dll版本 但是如果版本先试试any 也最好是转为所使用的系统位数。 -
具体详细的操作 可以参考 https://blog.csdn.net/abc8125/article/details/79768672。内容给我很大帮助 谢谢这位博主。
-
中间考虑过使用PHP调用dll,但是前期也是因为第三方所给dll是32的 本机系统为64位导致报错。反编译dll重新生成64位dll后 再在php中调用就都正常可以了。
-
PHP调用步骤简单首先在php.ini中配置需要调用的dll,然后将dll放入php文件夹下的ext目录下。
-
注册dll 这里一定更要注意 正常搜注册dll都是让用 regsv32注册 这样注册会报错 类似已找到模块但是不是有效的dll ocx文件。解决: Windows\Microsoft.NET\Framework64\v4.0.30319>RegAsm.exe 使用RegAsm进行注册。
例:C:\Windows\Microsoft.NET\Framework64\v4.0.30319>RegAsm.exe D:\Wamp\bin\php\php5.5.12\ext\CcDll.dll
使用cmd时 要用管理员用户启动 -
注册完成后 还要 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe 加入到缓存级 gacutil.exe 正常是没有的,没有单独的安装文件。最后没办法我是安装了一个VS2013,在使用的注册的时候也要注意版本
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe /i D:\Wamp\bin\php\php5.5.12\ext\CcDll.dll 装完以后会有多个版本的
/*php 调用*/
$b=new COM("CcDll.SaleService");
$value=$b->CompressStringEncrypt("123123","123");