Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Loading a 3rd party from a java code

Reply
Thread Tools

Loading a 3rd party from a java code

 
 
dvir shaty
Guest
Posts: n/a
 
      02-13-2011
Hi all,

I am trying to load a function from a 3rd party DLL from my java code
(in eclipse).

Can you please tell me how to do it?

I tried to use the following:

------------------------------------------------
package tal.packege;
class talclient
{
static
{
System.loadLibrary("talclient");
}
public static void main(String ar[])
{
System.out.println("Hello world from Java");
talclient t=new talclient();
String s = "172.16.10.31";
int a = 8888;
int b = 0;
t.tal_connect(s,a,b);

}
public native void tal_connect(String s, int a, int b);
}

------------------------------------------------


I get the following exception:


Exception in thread "main" java.lang.UnsatisfiedLinkError:
tal.packege.talclient.vtc_connect(Ljava/lang/String;II)V
at tal.packege.talclient.vtc_connect(Native Method)
at tal.packege.talclient.main(talclient.java:16)

According to the dll help file the arguments are defined as:

int tal_connect( char *servername,
Int portnum,
Int options)

The dll is stored in c:\windows\system32.


Thanks, Dvir.
 
Reply With Quote
 
 
 
 
dvir shaty
Guest
Posts: n/a
 
      02-13-2011
To make things clearer, the DLL is a C DLL.
 
Reply With Quote
 
 
 
 
Joshua Cranmer
Guest
Posts: n/a
 
      02-13-2011
On 02/13/2011 03:42 AM, dvir shaty wrote:
> According to the dll help file the arguments are defined as:
>
> int tal_connect( char *servername,
> Int portnum,
> Int options)


How does Java know that? DLLs would just store the exported function as
"tal_connect", with no type information whatsoever, so Java has no clue
what the type information is.

If it is just a raw C DLL, you will have to write the native JNI code to
do that. Googling `JNI tutorial' should give it to you.

--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth
 
Reply With Quote
 
Arne Vajhøj
Guest
Posts: n/a
 
      02-13-2011
On 13-02-2011 03:42, dvir shaty wrote:
> I am trying to load a function from a 3rd party DLL from my java code
> (in eclipse).
>
> Can you please tell me how to do it?
>
> I tried to use the following:
>
> ------------------------------------------------
> package tal.packege;
> class talclient
> {
> static
> {
> System.loadLibrary("talclient");
> }
> public static void main(String ar[])
> {
> System.out.println("Hello world from Java");
> talclient t=new talclient();
> String s = "172.16.10.31";
> int a = 8888;
> int b = 0;
> t.tal_connect(s,a,b);
>
> }
> public native void tal_connect(String s, int a, int b);
> }
>
> ------------------------------------------------
>
>
> I get the following exception:
>
>
> Exception in thread "main" java.lang.UnsatisfiedLinkError:
> tal.packege.talclient.vtc_connect(Ljava/lang/String;II)V
> at tal.packege.talclient.vtc_connect(Native Method)
> at tal.packege.talclient.main(talclient.java:16)
>
> According to the dll help file the arguments are defined as:
>
> int tal_connect( char *servername,
> Int portnum,
> Int options)
>
> The dll is stored in c:\windows\system32.


JNI does not support calling arbitrary functions in a
DLL.

You need to create wrapper function and DLL that is
JNI compatible and call that.

Arne
 
Reply With Quote
 
Ian Shef
Guest
Posts: n/a
 
      02-15-2011
Arne Vajhøj <> wrote in news:4d580572$0$23756$14726298
@news.sunsite.dk:

> On 13-02-2011 03:42, dvir shaty wrote:
>> I am trying to load a function from a 3rd party DLL from my java code
>> (in eclipse).
>>
>> Can you please tell me how to do it?
>>
>> I tried to use the following:
>>
>> ------------------------------------------------
>> package tal.packege;
>> class talclient
>> {
>> static
>> {
>> System.loadLibrary("talclient");
>> }
>> public static void main(String ar[])
>> {
>> System.out.println("Hello world from Java");
>> talclient t=new talclient();
>> String s = "172.16.10.31";
>> int a = 8888;
>> int b = 0;
>> t.tal_connect(s,a,b);
>>
>> }
>> public native void tal_connect(String s, int a, int b);
>> }
>>
>> ------------------------------------------------
>>
>>
>> I get the following exception:
>>
>>
>> Exception in thread "main" java.lang.UnsatisfiedLinkError:
>> tal.packege.talclient.vtc_connect(Ljava/lang/String;II)V
>> at tal.packege.talclient.vtc_connect(Native Method)
>> at tal.packege.talclient.main(talclient.java:16)
>>
>> According to the dll help file the arguments are defined as:
>>
>> int tal_connect( char *servername,
>> Int portnum,
>> Int options)
>>
>> The dll is stored in c:\windows\system32.

>
> JNI does not support calling arbitrary functions in a
> DLL.
>
> You need to create wrapper function and DLL that is
> JNI compatible and call that.
>
> Arne
>

And furthermore...
- Your code calls tal_connect, but the error message is for vtc_connect.
- char * is NOT the same as java.lang.String




 
Reply With Quote
 
Arne Vajhøj
Guest
Posts: n/a
 
      02-16-2011
On 15-02-2011 18:35, Ian Shef wrote:
> Arne Vajhøj<> wrote in news:4d580572$0$23756$14726298
> @news.sunsite.dk:
>
>> On 13-02-2011 03:42, dvir shaty wrote:
>>> I am trying to load a function from a 3rd party DLL from my java code
>>> (in eclipse).
>>>
>>> Can you please tell me how to do it?
>>>
>>> I tried to use the following:
>>>
>>> ------------------------------------------------
>>> package tal.packege;
>>> class talclient
>>> {
>>> static
>>> {
>>> System.loadLibrary("talclient");
>>> }
>>> public static void main(String ar[])
>>> {
>>> System.out.println("Hello world from Java");
>>> talclient t=new talclient();
>>> String s = "172.16.10.31";
>>> int a = 8888;
>>> int b = 0;
>>> t.tal_connect(s,a,b);
>>>
>>> }
>>> public native void tal_connect(String s, int a, int b);
>>> }
>>>
>>> ------------------------------------------------
>>>
>>>
>>> I get the following exception:
>>>
>>>
>>> Exception in thread "main" java.lang.UnsatisfiedLinkError:
>>> tal.packege.talclient.vtc_connect(Ljava/lang/String;II)V
>>> at tal.packege.talclient.vtc_connect(Native Method)
>>> at tal.packege.talclient.main(talclient.java:16)
>>>
>>> According to the dll help file the arguments are defined as:
>>>
>>> int tal_connect( char *servername,
>>> Int portnum,
>>> Int options)
>>>
>>> The dll is stored in c:\windows\system32.

>>
>> JNI does not support calling arbitrary functions in a
>> DLL.
>>
>> You need to create wrapper function and DLL that is
>> JNI compatible and call that.


> And furthermore...
> - Your code calls tal_connect, but the error message is for vtc_connect.
> - char * is NOT the same as java.lang.String


Both will somewhat become obvious when creating the
JNI wrapper.

The output from javah will show a lot.

Arne

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Wonder why old 4/3rd lenses are slow on m4/3rd bodies? RichA Digital Photography 8 03-02-2012 11:40 PM
Anyone willing to modify 3rd party perl code? buck Perl Misc 10 02-18-2010 02:35 AM
3rd Party app stopping Zero config service on startup =?Utf-8?B?QW5ndXMgUm9va2U=?= Wireless Networking 1 08-20-2005 06:55 AM
Re: Request: A+ Complete 3rd edition (PDF) [1/1] - A+ Complete 3rd edition.txt (1/1) Spammy Sammy A+ Certification 0 03-04-2005 12:55 PM
polling for popup created by 3rd party java app 2xzero Java 1 02-16-2004 11:58 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57