Vor einiger Zeit habe ich Java verwendet, um einen Installateur für Webumgebung zu entwickeln, das von Tomcat MySQL erstellt wurde. Während des Entwicklungsprozesses stieß ich auf Probleme wie das Schreiben von Registrierung und Registrierung von Systemdiensten usw., die mit Java selbst schwer zu lösen waren. Daher dachte ich an die Verwendung von JNI. C und Delphi entwickeln JNI.
Um JNI mit Delphi zu entwickeln, laden Sie zuerst jni.pas von http://delphi-jedi.org herunter, fügen Sie es dem Projekt hinzu und Sie können JNI entwickeln.
Erstellen Sie beispielsweise eine Desktop -Verknüpfung:
Code in Delphi:
Bibliothek mydll
Verwendung
JNI, Windows, Comobj, ActiveX, Shlobj, Sysutils, Registrierung;
// Holen Sie sich das Desktop -Verzeichnis
Funktion getDesKtoppath (): String;
var
Reg: Tregistry;
Desktoppath: String;
Beginnen
Reg: = tregistry.create;
versuchen
Reg.rootkey: = hKey_current_user;
Reg.openkey ('Software/Microsoft/Windows/Currentversion/Explorer/Shell -Ordner', False);
wenn Reg.ValueExists ('Desktop') dann Desktoppath: = Reg.Readstring ('Desktop');
Ergebnis: = Desktoppath;
Endlich
Reg.Free;
Ende;
Ende;
// Erstellen Sie Desktop -Verknüpfungen
Prozedurer erstelltesKtoPlink (Programpath, ProgramArg, LinkName, Descr, IconPath: String);
var
ANOBJ: IUKNNOWN;
ShellLink: iShellLink;
AFILE: IPERSISTFILE;
Dateiname: Widestring;
LinkPath: String;
Beginnen
LinkPath: = getDesKtoppath ()+'/'+linkName;
Wenn Großbuchstaben (ExtractFileext (LinkPath)) <> '. LNK' dann prüfen, ob die Erweiterung korrekt ist
Beginnen
Ausnahme erhöhen.
Ende;
versuchen
Oleeinitialize (NIL); // Initialisieren Sie die OLE -Bibliothek, die Initialisierung muss vor der Verwendung der OLE -Funktion aufgerufen werden.
ANOBJ: = CreateComObject (clSID_ShellLink); // Erstellen Sie ein COM -Objekt basierend auf der angegebenen Klasside. Hier ist die Verknüpfung
ShellLink: = Anobj As iShellLink; // CAPT zur Verknüpfungsschnittstelle
AFILE: = ANOBJ AS IPERSISTFILE; // Captive Conversion zur Dateischnittstelle
// Verknüpfungseigenschaften festlegen, sind hier nur wenige häufig verwendete Eigenschaften festgelegt
ShellLink.setPath (PCHR (Programm));
ShellLink.setArguments (PCHR (programmArg)); // Zieldateiparameter
ShellLink.SetworkingDirectory (PCHRE (ExtractFilePath (Programpath))); // Arbeitsverzeichnis der Zieldatei
ShellLink.SetDescription (PCHR (DESCR)); // Beschreibung der Zieldatei
ShellLink.SeticonLocation (pchar (iConPath), 0);
Dateiname: = linkPath; // Dateinamen in den Widestring -Typ konvertieren
Afile.save (pwchar (Dateiname), falsch); // Verknüpfung speichern
Endlich
Oleuninitialize; // Schließen Sie die OLE -Bibliothek, diese Funktion muss paarweise mit OleInitialize aufgerufen werden
Ende;
Ende;
// Erstellen Sie eine Desktop -Verknüpfung. Diese Methode wird in JNI aufgerufen
// Die Benennung dieses Prozesses ist sehr speziell. Diese Benennungsmethode kann nicht falsch sein, andernfalls kann die Java -Klasse der NATIV -Methode damit nicht entsprechen. Gleichzeitig kann auf Win32 -Plattformen die aufrufende Methode dieses Prozesses nur als STDCall deklariert werden.
Prozedur java_com_wpd_javawindows_createdesktoPlink (Penv: pjnienv; obj: jobject; programpath, programmArg, linkname, decon, iconPath: jstring); stdcall;
var
JVM: tjnienv;
Path: String;
Parg: String;
Lname: String;
Beschreibung: String;
Ipath: String;
Beginnen
JVM: = tjnienv.create (penv);
Ppath: = jvm.unicodejstringtoString (Programpath);
Parg: = jvm.unicodejstringtoString (ProgrammArg);
Lname: = jvm.unicodejstringtoString (linkName);
Beschreibung: = jvm.unicodejstringtoString (DESCR);
Ipath: = jvm.unicodejstringtoString (iConPath);
Erstellte
Jvm.free;
Ende;
// Sende eine Nachricht an Java
Funktion java_com_wpd_javawindows_sendmessage (penv: pjnienv; obj: Jobject): Jobject; stdcall;
var
JVM: tjnienv;
MSG: Jobject;
M: String;
Beginnen
JVM: = tjnienv.create (penv);
// ************ Wenn die gesendete Nachricht chinesische Zeichen enthält, muss sie zunächst über UTF8Encode transkodiert werden, sonst wird sie verstümmelt, wenn sie in Java erhalten wird
m: = utf8encode ('chinesisch');
msg: = jvm.stringojstring (pchar (m));
Ergebnis: = MSG;
Ende;
{$ R *.res}
Exporte
Java_com_wpd_javawindows_createdesktoPlink,
Java_com_wpd_javawindows_sendmessage;
Ende.
Setzen Sie die obige Kompilierung ein, um die mydll.dll -Datei zu generieren, und legen Sie sie dort fest, wo Java sie finden kann.
Code in Java:
Paket com.wpd;
öffentliche Klasse Javawindows {
public native void erstellte
öffentliche native String sendMessage ();
statisch{
System.loadlibrary ("mydll");
}
public static void main (String s []) {
new Javawindows (). CreatedesktoPlink ("c: /text.exe", "," test.lnk "," "," c: /test.ico ");
System.out.println (New Javawindows (). SendMessage ());
}
}