Jacob com.jacob.com.ComFailException:无法将名称映射到dispid:

时间:2014-11-14 12:08:16

标签: java .net jacob

我一直试图使用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;
    }
  }
}

我非常感谢帮助弄清楚这里没有发生什么。感谢。

2 个答案:

答案 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本身。我摆脱了罐子,瞧它一切都开始工作了。