AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JNI gesucht

Ein Thema von Luckie · begonnen am 5. Sep 2006 · letzter Beitrag vom 18. Okt 2006
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#31

Re: JNI gesucht

  Alt 11. Sep 2006, 13:37
Ich versuche das ganze gerade zu debuggen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#32

Re: JNI gesucht

  Alt 25. Sep 2006, 09:51
OK, ich bin etwas weiter gekommen. Und zwar findet er diesen Pfad "SOFTWARE\\JavaSoft\\Java Runtime Environment" wohl nicht, obwohl er genauso in der Registry steht. Das verstehe ich irgendwie nicht. Jedenfalls bekomme ich an dieser Stelle
Code:
  res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_PATH_TO_JRE, 0, KEY_READ, &key);
  printf("RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_PATH_TO_JRE, 0, KEY_READ, &key)\n");  
 
  if (res != ERROR_SUCCESS) {   
     LPTSTR pszBuf;
    pszBuf = SysErrorMessage(GetLastError(), NULL, 0);
     _tprintf(_T("%s\n"), pszBuf);
    LocalFree(pszBuf);   
    return 0;
  }
in der Funktion int getJvmDllPath(char* path) die Fehlermeldung:
Zitat:
Das System kann die angegebene Datei nicht finden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#33

Re: JNI gesucht

  Alt 25. Sep 2006, 10:26
Hm, an den Leserechten solltest du ja nicht scheitern (wenn du den Schlüssel mittels Regedit siehst).
Ja, da geht's dann wieder los, den Fehler seh ich gerade nicht. Endet der Pfad mit einer \0? Sonst kann hier natürlich wieder das letzte Zeichen fehlen.
Ansonsten solltest du erstmal schauen, ob du denn einen anderen Schlüssel findest und öffnen kannst (z.B. HKEY_LOCAL_MACHINE\Software).

Was die Fehlermeldung angeht, so kenne ich jetzt die Funktion SysErrorMessage nicht, aber kommt denn das gleiche auch bei FormatMessage raus?
Code:
if (res != ERROR_SUCCESS) {   
  char[MAX_PATH] buf;
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, &buf[0], MAX_PATH, 0);
  _tprintf(_T("%s\n"), buf);
 
  return 0;
}
Wie gesagt, ich weiß einfach nicht, wie SysErrorMessage aufgebaut ist, kann natürlich auch das gleiche machen, nur wundert mich die Fehlermeldung etwas. An sich solltest du vielleicht auch das GetLastError direkt rausziehen, damit hier der letzte Fehler nicht durch den Aufruf von z.B. FormatMessage überschrieben wird (gut, passiert wohl eher nicht, aber trotzdem).

Ja, direkt einen Fehler seh ich natürlich auch nicht.
Funktioniert denn das Beispielprogramm an sich? Das hier sieht ja nach einer eigenen Funktion aus.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#34

Re: JNI gesucht

  Alt 25. Sep 2006, 13:21
So, es hat etwas gedauert, da ich erst mal feststellen musste das MinGW keinen Debugger mitbringt.

Also dein Testprogramm liefert auch keinen gültigen Pfad zurück. Und es kommt der gleiche fehler wie bei mir:
Zitat:
Das System kann die angegebene Datei nicht finden.
Ich verstehe das nicht. Funktioniert es denn bei dir?

SysErrorMessage ist nur ein Wrapper im MSDN-Library durchsuchenFormatMessage, um es etwas einfacher zu Hand haben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#35

Re: JNI gesucht

  Alt 25. Sep 2006, 15:20
Zitat von Luckie:
Ich verstehe das nicht. Funktioniert es denn bei dir?
Aber klar doch, würde doch keinen falschen Code posten
Also ich weiß nicht genau woher der Fehler kommen sollte. Da ich gerade kein MinGW zur Hand habe, hier mal das Kompilat (und ein leicht geänderter QC). Jetzt sollte der Fehlercode mit einer Meldung ausgegeben werden. Bei mir funktioniert alles wie es soll, gültiger Pfad und als Rückgabewert 0 (auf zwei Rechnern, beide mit XP SP 2).
Angehängte Dateien
Dateityp: zip jvm_test_586.zip (29,2 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#36

Re: JNI gesucht

  Alt 25. Sep 2006, 17:53
Werde ich norgen mal an der Arbeit ausprobiern. Danke für deine Mühe.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#37

Re: JNI gesucht

  Alt 26. Sep 2006, 08:45
Also bei deiner Exe funktioniert es.

Kompiliere ich deinen Quellcode kommt das:
Zitat:
Unable to open key Software\Javasoft\Java Runtime Environment
Error Code 2008950864Fehler beim Laden von á#$
Dann stürzt er ab und will einen Fehlerbericht senden.

Das verstehe ich einfach nicht. Mit Delphi geht es ja. Und warum geht dein Programm bei dir und mir und wenn ich deinen Code kompiliere geht es nicht mehr?

Wie kannst du den Quellcode überhaupt kompilieren? Denn in der Funktion int getJvmDllPath(char* path) ist die Variable res nicht deklariert. Ich kann ihn erst kompilieren, wenn ich die Variable deklariere. Aber selbst dann kompiliert er nur mit Warnungen. Betrifft aber hauptsächlich die Ausgaben mit printf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#38

Re: JNI gesucht

  Alt 26. Sep 2006, 09:06
HI,

Zitat von Luckie:
Also bei deiner Exe funktioniert es.
Puh, dachte schon ich hab irgendwie etwas geschaffen, was nur bei mir läuft

Zitat von Luckie:
Das verstehe ich einfach nicht. Mit Delphi geht es ja. Und warum geht dein Programm bei dir und mir und wenn ich deinen Code kompiliere geht es nicht mehr?
Das versteh ich auch nicht. Hm, ist merkwürdig. Da würde ich aber fast behaupten, dass es diesmal am Compiler liegen müsste. Der QC kann es ja nicht sein, der ist diesmal gleich. Hast du es mal mit dem BCC5.5 versucht? Den findest du als freien Download auf den Borland-Seiten. Da musst du dann allerdings immer den Biblioteks und Suchpfad angeben oder (in guter Borlandmanier) für den compiler bzw. Linker eine .cfg Datei anlegen, in der die Optionen drin sind.
Jedenfalls hab ich mit dem diesen Code erzeugt. Ja, printf ist natürlich nicht das schönste, aber was gibt es denn so für Alternativen in C? Kenne mich da echt wenig aus

Zitat von Luckie:
Wie kannst du den Quellcode überhaupt kompilieren? Denn in der Funktion int getJvmDllPath(char* path) ist die Variable res nicht deklariert
Also bei mir (letzte Version die ich eigentlich angehangen habe) steht die Funktion ungefähr so drin:
Code:
int getJvmDllPath(char* path) {
....
  // öffnen des Schlüssels
  // HKEY_LocalMachine\\Software\\JavaSoft\\Java Runtime Enviroment\\
  long res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_PATH_TO_JRE, 0, KEY_READ,
                          &key);
wobei res also gleich in dieser Zeile deklariert wird als long. Deswegen sollte es auch eigentlich keine Probleme beim Compilieren geben. Aber wenn sich sogar der Quellcode beim Übertragen ändert

Ich weiß ehrlich gesagt nicht, warum es mit MinGW nicht laufen sollte. Wenn es Probleme beim Compilieren gäbe oder so, dann könnte ich das ja noch verstehen, aber wenn er die Datei linkt, dann sollte es eigentlich so laufen. Hast du denn wirklich mal andere Schlüssel zu öffnen versucht? Also wirklich nur eine C Programm, dass nicht mehr macht als einen beliebigen Schlüssel in der Registry zu öffnen?

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#39

Re: JNI gesucht

  Alt 26. Sep 2006, 09:20
Das mit der Deklaration habe ich jetzt auch gesehen. Nur ein Programm, was den betreffenden Schlüssel öffnet, werde ich gleich mal machen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#40

Re: JNI gesucht

  Alt 26. Sep 2006, 11:34
So neue Erkenntisse:
Dieser Code:
Code:
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include "MpuTools.h"

int OpenRegPath(TCHAR* Path) {
   HKEY key = NULL;
   
   _tprintf(Path);
   _tprintf(_T("\n"));
   long res = RegOpenKeyExW(HKEY_CURRENT_USER, Path, 0, KEY_READ, &key);   
   
   return res;
}

int main () {
   DWORD res = OpenRegPath(_T("Software\\Intel"));
   if (res != ERROR_SUCCESS) {
      TCHAR szBuf[80];
      _tprintf(_T("%s\n"), SysErrorMessage(GetLastError(), szBuf, countof(szBuf)));   
   }
   else {
      _tprintf(_T("Schlüssel konnte erfolgreich geöffnet werden."));
   }
   return 0;
}
Mit VC kompiliert funktioniert. Der selbe Cod emit MinGW kompiliert funktioniert nicht und der Schlüssel kann nicht geöffnet werden. Ich schließe daraus, dass es sich um eine Einstellungssache bei MinGW handelt. Nur welche?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz