Shell32 einbinden

Ich erstelle gerade ein kleines Stückchen C code für Java. Ich berwende dafür keine IDE sondern compile und packe mittels MinGW. Nun wollte ich die Shell32.dll die Shell32api.# und die Shell32.lib einbinden, mur weiß ich net wie.
Hoffe ihe könnt mir helfen

Wenn ich mich nicht irre macht man es mit den Schalter -lshell32.
Gruß,
Freak

Zur Not per Hand mit LoadLibrary und GetProcAddress

Wie macht man das denn mit loadlibrary und getprocaddress


typedef bool (__stdcall *_Scan_Data)(void *db, void *c, long *RecNo);

_Scan_Data Scan_Data;

void InitSystem(const char *RootDir)
{
	HINSTANCE h;
	CString cs;
	cs.Format("%s%s", RootDir, "Name_der_.dll");
	h = LoadLibrary (cs);

	if (h)
	{

		Scan_Data = (__Scan_Data)GetProcAddress(h, "Scan_Data");  // exportierte Function heißt Scan_Data

...
}

Hab mir jetzt CDT für Eclipse geholt und benutze den MinGW Compiler. Compilieren tut er, nur das Problem ist dass ich es nicht hinbekomme bei den Projektoptionen die shared libraries optionen zu setzen. Brauche -Wl,–add-stdcall-alias damit die linkings richtig erstellt werden. Nur kriege ich das nicht ricjtig hin o.O. Habe in die Felder alles mögliche eingegeben nur kam da nie was rivhtiges raus…

Hast Du mein Beispiel getestet?

Naja… Ich hab keine Ahnung wie ^^ hab zwei Monate c geschrieben mehr nicht, daher kann ich net viel :blame:

Poste oder PM mir mal Deine C-Sourcen

[QUOTE=groggy]Ich erstelle gerade ein kleines Stückchen C code für Java. Ich berwende dafür keine IDE sondern compile und packe mittels MinGW. Nun wollte ich die Shell32.dll die Shell32api.# und die Shell32.lib einbinden, mur weiß ich net wie.
Hoffe ihe könnt mir helfen[/QUOTE]

Entscheide dich bitte für DLL oder LIB, also dynamisch oder statisch. Wie es dynamisch geht, wurde schon gelistet. Wenn du es statisch willst brauchst Du noch die Object-Datei, also shell32.o. Außerdem musst Du darauf achten das es für die LIB-Datei verschiedene Formate gibt.

Ich bräuchte eine dll. Diese möchte ich dann in Java laden. Die dll sollte Win32NativeIOExtras heißen…

Moin,

ich vermute das ist nur eine Test-DLL um mit JNI zu experimentieren.

Folgendes ist unnötig:


	int length = strlen(src) + 2;
	char *csrc = new char[len];
	strcpy(csrc, src);
	csrc[length - 1] = csrc[length - 2] = '\0';

Du erhälst schon einen ‚\0‘-terminierten String aus


src = (LPCTSTR)(*env)->GetStringUTFChars(env, path, NULL);

strlen() mach nämlich nichts weiter als die Anzahl der Zeichen von ‚src‘ bis ‚\0‘ zu zählen.

Dann hast Du eben noch das Problem das Du Dich entscheiden musst ob Du dynamisch (DLL) oder Statisch (LIB) auf die Shell32 zugreifen willst. Daran unterscheiden sich auch die Compilerparameter.

Unabhängig davon empfehle ich die die Express_Version von VisualStudio zu installieren und damit die Deine DLL zu erstellen. MS hat an der Stelle wirklich Ahnung wie das geht :wink:

Jop dient zum experimentieren. Mir fehlen halt Kenntnisse in C. Den JNI Stoff habe ich recht schnell kappiert.
Zun einbinden, gibt es Vorteile bezüglich der Art wie ich die dll einbinde oder auch Nachteile!

auf JNI Seite nicht - auf DLL Entwicklungsseite eigentlich auch nicht

Ahso… Ja damit kenn ich mich nicht aus blame
Muss mich echt mal damit auseinander setzen, nur ich sehe es schon voraus: C ist nicht meinne Sprache und es wird schwer es zu lernen…

Mal so ne Frage falls das überhaupt noch jemand liest:
Ich erstelle gerade einen Launcher der ne JVM starten soll und dann meine Main(ist hauptsächlich JNI Kram).
Nur kriege ich beim Compilen nen Fehler das er JavaVM* net finden kann obwohl ich ja die Header Datei jni.h eingebunden habe. Hab gegooglet und dort wurde auch nur die Header Datei verwendet. Weiß jemand von euch vielleicht wieso er diese nicht finden kann? Muss ich die jvm.dll einbinden(hoffentlich nicht ;))?

Du solltest Dir mal angewöhnen wenigstens etwas mehr an Infos (was Compiler & Co generieren) mit zu posten.

Ich vermute das Du den Include-Pfad nicht richtig gesetzt hast (müsste die -I Option sein)

Jop :smiley: hab ich vergessen… Man da muss man echt viel beachten :frowning:
Ich benutze MinGW, hab ich aber auch schonmal erwähnt.

Der von dir eingegebene Text ist zu kurz. Bitte erweitere den Text auf die minimale Länge von 2 Zeichen.

Was meinst du jetzt?
Das Problem hat sich erledigt. Hab den -I net richtig gesetzt.