我一直试图使用Jacob从Java调用dll函数而没有任何成功。我按照这里描述的那样用regasm注册了dll - http://www.dreamincode.net/forums/topic/114094-using-dll-library-in-java-application-using-jacob/。我的代码:
String serverName = "...", fileName = "...";
Dispatch dispatch = new Dispatch("dllx32conn.dbconn");
Dispatch.call(dispatch, "pass_para", serverName, fileName);
这不起作用。它会抛出com.jacob.com.ComFailException:无法将名称映射到dispid:pass_para
所以我决定通过使用JetBrains dotPeek反编译来分析dll函数。这是我发现的
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
namespace dllx32conn
{
public class dbconn
{
public static string conn_str = "";
public static string strFilePath = "";
public static SqlConnection Conn = new SqlConnection();
public static DataTable tbl;
public static SqlDataAdapter dap;
public static void pass_para(string servname, string csvpth)
{
dbconn.conn_str = "Data Source=" + servname + ";Initial Catalog=Billing;User Id=Scd;Password=Smart11Siri";
dbconn.strFilePath = csvpth;
}
}
}
我非常感谢帮助弄清楚这里没有发生什么。感谢。
答案 0 :(得分:0)
问题解决了 - 我只需删除静态'我的DLL方法的函数声明归功于这篇文章 - http://jumbloid.blogspot.com/2009/12/making-net-dll-com-visible.html
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
namespace dllx32conn
{
public class dbconn
{
public static string conn_str = "";
public static string strFilePath = "";
public static SqlConnection Conn = new SqlConnection();
public static DataTable tbl;
public static SqlDataAdapter dap;
public void pass_para(string servname, string csvpth)
{
dbconn.conn_str = "Data Source=" + servname + ";Initial Catalog=xxx;User Id=xxx;Password=xxx";
dbconn.strFilePath = csvpth;
}
}
}
答案 1 :(得分:0)
所以我收到了这个错误,最终我的问题是我在类路径上有两个类的实例。我已经解压缩了一个依赖jar的类以及路径上的jar本身。我摆脱了罐子,瞧它一切都开始工作了。