Toon posts:

[java + MSDN] Windows API's aanroepen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Weet iemand hoe ik een Windows API (die zo mooi zijn opgesomd in de MSDN) kan aanroepen met Java? Ik begrijp eruit dat je gewoon de windows service verwijzers uit dll's moet gebruiken. Maar hoe?
Ik wil dit namelijk doen met de SUN VM en niet met die MS VM.

Heeft iemand dit al eens gedaan??

onwijs bedankt alvast!

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
http://www.atwistedweb.com/java/jni.html
http://www.microsoft.com/mind/0198/jdirect.asp

Gevonden via Google: http://www.google.nl/sear...8&q=call+windows+api+java

Vooral de eerste lijkt me een goede, compleet met code voorbeeld.

[ Voor 18% gewijzigd door zneek op 22-07-2003 21:05 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
zneek: de Java Native Interface is een interface om Java methoden te implementeren in native C code. Hoewel je daarmee dus inderdaad Win32 API calls kunt doen, moet je die code dan wel in C schrijven en dus niet in Java.

Om de Win32 API vanuit Java te gebruiken, is er een package nodig die van diezelfde Java Native Interface gebruik maakt om de API via Java klassen aan te bieden. Op die manier kun je vanuit Java van de Win32 API gebruik maken. Als ik het goed begrijp, was J/Direct gebaseerd op de Microsoft VM, die niet meer ondersteund wordt. Dat is dus niet echt een oplossing.

Of er een andere geschikte package bestaat, zou ik zelf niet weten.

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Check de bovenste link (http://www.atwistedweb.com/java/jni.html), klik door naar het "overly simple" example:
You can call code written in any programming language from a program written in the Java language by declaring a native Java method, loading the library that contains the native code, and then calling the native method. The ReadFile source code below does exactly this.
Ik heb geen behoefte om dat helemaal uit te dokteren. Het gaat in de richting van wat de TS wil(hoewel ik zie dat het idd gericht is op je eigen native methodes), en hij weet precies wat hij nodig heeft, en kan dus makkelijk de inschatting maken of het in de buurt komt, toch :? Just trying to help... :)

Als je met JNI native methodes kunt aanroepen, hoe ver ben je dan nog van API calls?

[edit] hoppa nog een: http://community.borland.com/article/0,1410,20679,00.html

en nog een: http://saloon.javaranch.c...b=get_topic&f=34&t=000058

http://www.linar.com/ -> J-Integra een Java/COM/ActiveX interface, misschien kan je daar wat mee?

Heb je wel gezocht TS?

[ Voor 33% gewijzigd door zneek op 22-07-2003 23:59 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
NOFI, maar je mist het punt, zneek. Met de Java Native Interface kun je native C code schrijven die vanuit Java aan te roepen is. In je native C code kun je ook uitstekend Windows API calls doen. Dat werkt prima, maar als Java programmeur heb je daar waarschijnlijk geen reet aan, omdat je dus geen C kan!

Vergis je niet: de JNI is redelijk ingewikkeld, zeker als je met echte Java objecten en concepten als Java multithreading en de Java garbage collector wilt werken. Ik kan me dus voorstellen dat het niet de bedoeling van de topic starter is om C en de JNI te leren.

Waar de topic starter volgens mij naar op zoek is, is een Java package die de Windows API in Java ter beschikking stelt. Die package zal dan zelf van de JNI gebruik maken voor de implementatie (in C code), maar een Java programmeur hoeft dan uitsluitend Java code te schrijven. Alleen, voor zover ik weet, bestaat zo'n package (nog) niet.

[ Voor 4% gewijzigd door Soultaker op 23-07-2003 01:32 ]


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Soultaker schreef op 23 July 2003 @ 01:30:
NOFI, maar je mist het punt, zneek. Met de Java Native Interface kun je native C code schrijven die vanuit Java aan te roepen is. In je native C code kun je ook uitstekend Windows API calls doen. Dat werkt prima, maar als Java programmeur heb je daar waarschijnlijk geen reet aan, omdat je dus geen C kan!

Vergis je niet: de JNI is redelijk ingewikkeld, zeker als je met echte Java objecten en concepten als Java multithreading en de Java garbage collector wilt werken. Ik kan me dus voorstellen dat het niet de bedoeling van de topic starter is om C en de JNI te leren.

Waar de topic starter volgens mij naar op zoek is, is een Java package die de Windows API in Java ter beschikking stelt. Die package zal dan zelf van de JNI gebruik maken voor de implementatie (in C code), maar een Java programmeur hoeft dan uitsluitend Java code te schrijven. Alleen, voor zover ik weet, bestaat zo'n package (nog) niet.
precies. Na 3 minuten zoeken via Google en het java.sun.com forums kom je tot dezelfde conclusie :) Namelijk dat de enige manier via JNI is. Althans, wat ik kon vinden. Ik bedoelde maar aan te duiden dat TS kennelijk zelf nog geen poging gewaagd heeft om te zoeken.

Ik vind het trouwens wel interessant, en ga zelf eens een poging wagen zo gauw ik weer wat tijd over heb .... ergens in 2006 ofzo denk ik :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
offtopic:
In 2006 gebruikt iedereen C#/.NET, want dan kun je de Windows API's al zonder gezeik gebruiken. ;)

[ Voor 5% gewijzigd door Soultaker op 23-07-2003 15:48 ]


Verwijderd

Topicstarter
Mooie discussie gestart, geloof ik :). Maar idd ben ik op zoek naar een methode/wrapper/interface waarbij ik geen kennis hoef te hebben van C# of JNI. Ik zou best nog eens C# willen leren maar nu zou ik gedwongen zijn dit uit te zoeken.
Ik ben zelf ook nog eens gaan zoeken (Nu wist ik waar ik naar zocht) en ik kwam met dit:

Hier de JNI tutorial van SUN zelf;
http://java.sun.com/docs/books/tutorial/native1.1/

Hier een uitgebreide FAQ over de JNI;
http://jguru.com/faq/printablefaq.jsp?topic=JNI

Een JNI wrapper. Ideaal, maar 't zal weer eens geen geld kosten. Zal SUN blij mee zijn.
http://www.jniwrapper.com/index.jsp

Hier nog een commerciële Interface.
http://www.excelsior-usa.com/xfunction.html

Allebei onwijs bedankt iig, jullie hebben me een flinke schop in de juiste richting gegeven.

  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Een probleem is dat een API wrapper wel redelijk compleet moet zijn wil het een beetje werken.. Een MessageBox wrapper is nog makkelijk te doen, aangezien de parameters gewoon 2 ints en 2 strings zijn.. Maar structures worden al een stuk lastiger aangezien je die ook vanuit java wil bewerken, die moeten dus ook gewrapt worden en functies die de structures gebruiken moeten dan daarvoor in de plaats de wrappers gebruiken. Dus aleen een manier om de APIs aan te roepen is niet genoeg, een beetje bruikbare wrapper moet een hoop wrappen. Dat maakt het weer erg veel werk, vandaar dat er waarschijnlijk weinig te vinden is en wat er te vinden is alleen betaald te krijgen is..
Ik weet niet precies wat je wil doen maar ik zou gewoon een C++ een DLL maken die de functies aanroept en die interfacen met JNI. Das volgens mij nog altijd makkelijker dan zo'n wrapper gebruiken.

www.madwizard.org

Pagina: 1