1.使用Visual Studio 2019创建项目 C# 类库(.net Standard)。
1using System; 2namespace testDll 3{ 4 public class Test 5 { 6 public string MyTest() 7 { 8 return "ok"; 9 } 10 public string good() { 11 return "GOOD"; 12 } 13 } 14}
2.这里面有个坑:就是必须创建两个函数,一个函数会报个错误:com.jacob.com.ComFailException: Can't map name to dispid:MyTest
3.生成解决方案
4.注册dll,注册dll时候注意。
4.1 去查看你系统里面 C:\Windows\Microsoft.NET\Framework64 版本最高的NET。用最高的版本注册。不然会报错:RegAsm : error RA0000 : “D:\testDll.dll”不是有效的 .NET 程序集,因此未能加载它。
4.2注册时dll文件不要放到c盘会报错:RegAsm : error RA0000 : 无法定位输入程序集“C:\Program”或它的一个依赖项,放到其他盘就可以。这里注册无所谓你文件放哪里注册。
1cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319 2regasm D:testDll.dll
5.将编写好的dll文件放到jdk/bin里面。或者发布的时候放在jre/bin。或者tomcat/bin。按具体情况定。
6.这样就跳过所有的坑了。然后就是jacob的配置了,这个是不多说,可以参考:jacob安装配置完整版
7.java里面的代码
1public static void MyTest() { 2 3 ActiveXComponent dotnetCom1 = null; 4 try { 5 dotnetCom1 = new ActiveXComponent("testDll.Test"); 6 //Variant rs=Dispatch.call(dotnetCom1, "MyTest", new Object[]{st,var,st1,pst,pnst}); 7 Variant rs=Dispatch.call(dotnetCom1, "MyTest"); 8 System.out.println(rs.toString()); 9 } catch (Exception var11) { 10 var11.printStackTrace(); 11 throw new RuntimeException(var11.getMessage()); 12 } finally { 13 if (dotnetCom1 != null) { 14 dotnetCom1.safeRelease(); 15 } 16 } 17 18 }
上面的项目使用:.net Standard编写发现在服务器上面注册不了,因为服务器安装不了高版本的net Framework 4.7.2
所以后面使用:.net Framework编写 然后net 版本要选低一些的。
这里有个bug:必须在项目右键属性->应用程序->程序集信息-> 使程序集COM可见(M)这个勾打上。不然会报错:在注册dll时会报没有改注册类型错误。