# Windows-Api nutzbar(?)



## [RTB]H3r0 (10. Jan 2005)

hallo.

Ich suche nach einer mölichkeit direkt Windows-api Funktionen auszuführen.
konkret sind das 
GetPrivateProfileString()     und
WriteProvateProfileString()

das ist rasanter iniDateien-zugriff.
steckt in kernel32.dll
wie komm ich da ran??

wichtig ist, das ich suns sdk nutze, und J/Diect mir also nix bringt 
/**@dll.import("kernel32")*/
klappt nicht! (is ja klar)

wie kann man das sonst lösen??

ich habe von einem Package gehöhrt, weclches dies Funktion(alität)en bereit stellt.

comm.ms.irgendwas
gibts vielleicht nen trick mit import??

BITTE!! zeitkritisch.


----------



## KSG9|sebastian (10. Jan 2005)

schau mal nach dem JNI (Java Native Interface) wenn ich recht weiß  Da kannst du dll's imporiteren und ausführen


----------



## thE_29 (10. Jan 2005)

importieren tust du sie mit

System.loadLibrary("kernel32");

die Frage ist nur wie man sie nutzt!

Ich such zwar danach, find aber nix gscheits!


----------



## KSG9|sebastian (10. Jan 2005)

hier:
http://www.galileocomputing.de/openbook/javainsel/java-24.htm

und da:
http://java.sun.com/j2se/1.5.0/docs/guide/jni/index.html

und das vll.
http://www.excelsior-usa.com/xfunction.html


----------



## Gast (11. Jan 2005)

okok....
das sollte mir helfen 
ich probier mal gleich rum....


----------



## Gast (11. Jan 2005)

das ist ja voll shit!
immerhin kann ich dann wenigstens wieder ein bischen c++ machen.....
wenn ichs geschaft hab, stell ich files online!


----------



## thE_29 (11. Jan 2005)

es gibt schon fertige libarys die das können, habe genug gefunden 

Ausserdem ist das net wirklich schwer


----------



## Bleiglanz (11. Jan 2005)

such mal nach JAVA - OLE Bridge bei Google...


----------



## [RTB]H3r0 (11. Jan 2005)

thx a lot mr. BleiglanzZz


----------



## [RTB]H3r0 (11. Jan 2005)

thE_29 hat gesagt.:
			
		

> es gibt schon fertige libarys die das können, habe genug gefunden
> 
> Ausserdem ist das net wirklich schwer



na dann binde mir das mal ein!

APIs:

```
DWORD WritePrivateProfilString(LPCTSTR lpszSectionName,
                        LPCTSTR lpszKeyName,LPCTSTR lpszStringValue, LPCTSTR lpszIniFileName)
```


```
DWORD GetPrivateProfileString(LPCTSTR lpszSectionName, LPCTSTR lpszKeyName, LPCTSTR lpszDefaultValue,
                        DWORD dwcBuffer, LPCTSTR lpszIniFileName)
```
aus kernel32.dll

also, bitte, wie kann ich die nutzen??????
JAVA:


```
public class apiTESTER{
	public native String getProfileString(String section, String key, String defValue, String filename););
	public native void setProfileString(String section, String key, String value, String fileName);

	static{
		//System.loadLibrary("user32");
		//System.loadLibrary("ownLib");
	}
	public static void main(String args[]){
		
	}
}
```
das schaff ich auch noch.
dann den HEADER:

```
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class apiTESTER */

#ifndef _Included_apiTESTER
#define _Included_apiTESTER
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     apiTESTER
 * Method:    getProfileString
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_apiTESTER_getProfileString
  (JNIEnv *, jobject, jstring, jstring, jstring, jstring);

/*
 * Class:     apiTESTER
 * Method:    setProfileString
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_apiTESTER_setProfileString
  (JNIEnv *, jobject, jstring, jstring, jstring, jstring);

#ifdef __cplusplus
}
#endif
#endif
```

soweit ist mir sogar alles klar, ich weiss auch mit den beiden generierten parametern was anzufangen!
nur jetzt muss ich natürlich auch eine implementierung mit c/c++ schreiben.


```
/*DAS IST DIE FRAGE!!! WIE WÄRS MIT:*/
#include <jni.h>
#include "apiTESTER.h"

JNIEXPORT void JNICALL Java_apiTESTER_setProfileString(JNIEnv *, jobject, jstring, jstring, jstring, jstring){

  //nun muss hier der apiAufruf stattfinden.... nur WIE?????

}
JNIEXPORT jstring JNICALL Java_apiTESTER_getProfileString(JNIEnv *, jobject, jstring, jstring, jstring, jstring){

  //nun muss hier der apiAufruf stattfinden.... nur WIE?????

}
```

vielleicht ist dann auch wieder die frage, wie binde ich windows-API functionen mit c/c++ ein???


----------



## [RTB]H3r0 (11. Jan 2005)

ach ja....
und damm muss ich mir daraus noch dll
schreiben, damit ich die library auch mit system.loadLibrary()
einbinden kann.


----------



## thE_29 (12. Jan 2005)

Mh, soll ich dir das jetzt machen oder soll ich faul sein 

Ich hab schon viel mit JNI gemacht, aber ich hab zz keine Zeit!

Desweiteren welche Funktionen (Win Api) willst du implementiert haben?

Vielleicht mach ichs am NA!

die GetPrivateProfileString
oder die GetProfileString

und welche von denen
die WritePrivateProfileString
oder die WriteProfileString


----------



## Gast (9. Jun 2005)

hab ja alles hinbekommen.
wichtig ist, dass man den vollen klassennamen in der dl angibt.
mit package.
mann muss das in der cpp und dem h file entsprechen angeben.

mailt mir und ich schick dass dann mal raus.
Mailto: marvin.stolze@passus.de


----------



## thE_29 (9. Jun 2005)

Nur so zur Info 

http://www.java-forum.org/de/viewtopic.php?p=79116#79116


----------

