2014-11-14 57 views
1

我一直在嘗試使用Jacob從Java調用dll函數,但沒有取得任何成功。我已經完成了regrem的註冊,如此處所述 - 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:無法將名稱映射到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

問題解決了 - 我只是從我的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

所以我得到這個錯誤,最終我的問題是,我有兩個類路徑上的類的實例。我有一個依賴jar包的類以及路徑上的jar本身。我擺脫了瓶子,瞧這一切都開始美麗的工作。

相關問題