You are not logged in.

Dear visitor, welcome to Jabaco - Community. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

  • "rucksacktraeger" started this thread

Posts: 14

Date of registration: Mar 18th 2014

  • Send private message

1

Tuesday, March 18th 2014, 4:46pm

externe dll einbinden

Hallo,

ich möchte in meinem Projekt eine externe dll (Chilkat) einbinden.
Hier ist die Installationsanleitung für Java unter Windows.

Dank dieser Anleitung habe ich es geschafft, eine externe *.jar einzubinden. (Übringes... Sprict man hierbei von einer Klasse, einer Bibliothek, einer externen Java API oder wie nennt sich das dann?)

Aber zu der chilkat.jar die ich einbinden möchte, gehört noch eine chilkat.dll. Mit regsvr32 kann ich sie jedenfalls nicht registrieren. Wie kann ich sie in Jabaco einbinden?

Nun was ich gemacht habe:
Die chilkat-9.5.0-jdk7-x64.zip habe ich ein einen Ordner entpackt und in Jabaco die chilkat.jar mit F1 eingebunden.

Mit folgendem Code bekomm ich aber einen Fehler:

Public Sub Command1_Click()
Dim success As Long success = New com#chilkatsoft#CkMailMan.UnlockComponent("test")
If (success <> 1) Then
MsgBox "Component unlock failed"
End If
End Sub



Das ist der Java Code den ich zur Grundlage genommen habe


import com.chilkatsoft.*;
public class ChilkatExample {
static {
try {
System.loadLibrary("chilkat");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
public static void main(String argv[])
{
CkMailMan mailman = new CkMailMan();
boolean success;
success = mailman.UnlockComponent("30-day trial");
if (success != true) {
System.out.println("Component unlock failed");
return;
}



Tja, aber warum kommt es zu dem Fehler? Liegt die Lösung in der Installationsanleitung von Chilkat ?

Ich hoffe mal, ich hab nur ne Kleinigkeit übersehen und ihr bringt mich auf die richtige Fährte.

LG, Pete
rucksacktraeger has attached the following image:
  • jabaco_err.png

  • "rucksacktraeger" started this thread

Posts: 14

Date of registration: Mar 18th 2014

  • Send private message

2

Wednesday, March 19th 2014, 1:13pm

teilweise geklärt

Hab nochmal lange ausprobiert und bin zu dem Ergebnis gekommen, dass es funzt wenn ich system.load eintrage:


Public Sub Form_Load()
Select Case GetOS
Case "win"
System.load("D:\java\extlib32\chilkat\chilkat.dll")
Case "unix"
System.load("/home/test/chilkat/libchilkat.so")
Case "mac"
System.load("/Users/admin/chilkat/libchilkat.jnilib")
Case Else
MsgBox "Your OS is not supported!",vbCritical
Call End
End Select
End Sub

So klappt es jedenfalls unter Windows und Linux (MacOS habe ich nciht getestet, wird aber bestimmt auch klappen).

Aber wie kann ich verhindern, dass der Pfad nicht fest vorgegeben wird?
wenn die dll im selben Verzeichnis wie die jar liegt klappt ein Aufruf wie dieser trotzdem nicht:
System.load("chilkat.dll")


Any ideas?

theuserbl

Intermediate

Posts: 436

Date of registration: Dec 20th 2008

  • Send private message

3

Thursday, March 20th 2014, 1:36am

Kenne mich auch nicht so mit dem externen laden von dlls/sos von Java aus aus. Aber vielleicht durfte das hier helfen:
[ http://stackoverflow.com/questions/11931…in-project-java ]

Wenn das nicht helfen sollte, dann sag noch mal bescheid.


Grüße
theuserbl

Dani

Intermediate

Posts: 325

Date of registration: Nov 19th 2009

Location: GERMANY

  • Send private message

4

Thursday, March 20th 2014, 8:29am

Hey,

schau mal hier:

Some programs to share



Dani

  • "rucksacktraeger" started this thread

Posts: 14

Date of registration: Mar 18th 2014

  • Send private message

5

Thursday, March 20th 2014, 11:07am

@Dani:

So wie ich das sehe, werden in deinem link nur ActiveX dll verwendet die vorher nach c:\windows\... etc kopiert werden müssen. Genau das will ich ja vermeiden.

@theuserbl

Danke für den link. Der hat mich zu der, wie ich denke, Lösung gebracht die hier beschrieben wird. Da werden dlls ins jar eingefügt und dann zur Laufzeit in einen temporären Ordner geparkt.
Allerdings reichen dafür meine java kenntnisse nicht aus um das nach VB zu portieren.

Dani

Intermediate

Posts: 325

Date of registration: Nov 19th 2009

Location: GERMANY

  • Send private message

6

Friday, March 21st 2014, 9:51am

Hey,

Quoted

Aber wie kann ich verhindern, dass der Pfad nicht fest vorgegeben wird?
wenn die dll im selben Verzeichnis wie die jar liegt klappt ein Aufruf wie dieser trotzdem nicht:
System.load("chilkat.dll")


vorausgesetzt:
a) Du kompilierst zu einem .jar file
b) Deine .dll liegt im selben Verzeichnis wie das .jar file

sollte dies eigentlich funktionieren:

Jabaco Source

1
2
3
Public Sub Form_Load()
   System.load(App.Path & "\test.dll")
End Sub




Dani

  • "rucksacktraeger" started this thread

Posts: 14

Date of registration: Mar 18th 2014

  • Send private message

7

Friday, March 21st 2014, 10:56am

I got it

hey Dani,

danke für den Tipp. eigentlich hatte ich das schon so mal ausprobiert, aber es hatte nicht funktioniert. Trotzdem habe ich es gerade nochmal probiert weil du das so vorgeschlagen hast. Dabei habe ich mir die Fehlermeldung genauer angesehen:

java.lang.UnsatisfiedLinkError: Can't load library: C:\Users\pete_000\AppData\Local\Temp\Jabaco154225890\chilkat.dll


Darum schreibst du ja auch "vorausgesetzt: a) Du kompilierst zu einem .jar file"

Was ist das Fazit der Geschichte: Wer lesen kann ist klar im Vorteil.

Dani

Intermediate

Posts: 325

Date of registration: Nov 19th 2009

Location: GERMANY

  • Send private message
Rate this thread
WoltLab Burning Board