2014-11-14 2 views
1

Я пытаюсь вызвать функцию dll из Java с помощью Jacob без каких-либо успехов. Я сделал регистрацию dll с regasm, как описано здесь - http://www.dreamincode.net/forums/topic/114094-using-dll-library-in-java-application-using-jacob/. Мой код:Jacob com.jacob.com.ComFailException: Невозможно сопоставить имя с dispid:

String serverName = "...", fileName = "..."; 
Dispatch dispatch = new Dispatch("dllx32conn.dbconn"); 
Dispatch.call(dispatch, "pass_para", serverName, fileName); 

Это не работает. Он бросает com.jacob.com.ComFailException: Невозможно отобразить имя для отладки: pass_para

Итак, я решил проанализировать функции dll, декомпилировав его с помощью JetBrains dotPeek. Вот что я нашел

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

Проблема решена - я просто должен был удалить «статическое» объявление функции из моих методов 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; 
    } 
    } 
} 
0

Так что я получаю эту ошибку, и в конечном счете, моя проблема была, что у меня было два экземпляры классов на пути к классу. У меня были классы изависимой банки, распакованы, а также сама банка на пути. Я избавился от кувшина и вуаля, и все началось прекрасно.