Zum Inhalt springen

Zonbléou

Mitglieder
  • Gesamte Inhalte

    35
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Zonbléou

  1. Hallo, ich hätte noch eine Frage. wie holt man die Ergebnisvariablen aus einer DLL nach Java? Nach der Berechnung sind meine Ergebnisse in Variablen in der DLL gespeichert. Mfg. Z.
  2. Hallo meinen Herrn, ich dachte mit dem Projekt muss ich aufhören aber es ist nicht einfach. Ich sehe schon das Ende nur fehlt es mir die Ergebnisse. Bei meinen letzten Recherchen habe ich gemerkt, dass die Ergebnisse sind normalerweise in einer anderen Dll abgelegt. Diese sind in Ergebnisvariablen gespeichert. Diese Variablen mussen jetzt für die Bewertung zum Java Programm geholt werden. Ich wende mich noch an dich falls ich die richtige Implementierung nicht finde. Danke im voraus. Zonbléou
  3. Hallo, jetzt muss ich eigentlich mit dem projekt aufhören. Der Programmcode sollte normalerweise nicht veröffentlich werden, aber ich war stark am Suchen einer Lösung und habe deswegen alles das vergessen. Sorry! Ich habe jetzt versucht alle abhängigen Dll oder Bibliotheken im Adressraum des Processes zu laden. Alle Adressen könnten gelesen werden. Der Aufruf meiner Methode: pFn(input64); führt nicht mehr zu Programmabstürzt. Trotzdem habe ich keine Ergebnisse mit nur 0 im meinem Array. ich gehe davon aus, dass die Deklaration von meinem input64 auf der Wrapper Seite ist nicht richtig. So habe ich deklariert: env und jarr kommen von dem Parameter Liste meiner importierte Methode. Da bin mir nicht ganz sicher, ob es so sein soll. Danke für die Mitarbeit. Trotzdem habe ich was gelernt. Zombléou.
  4. Hallo, bevor ich meine Fragen stelle muss ich erst was versuchen. Ich denke ich weiss wirklich nicht wie ich weiter kommen kann. Ich kann mich nur auf ihre Unterstütznug verlassen. Ich muss jetzt versuchen die Fragen zu beantworten. Erstens habe ich versucht das Laden der Dll mit LoadLibrary(), die Methode die Maindll und die abhängigen Dll mitlädet und initialisiert. Ich kann damit die Dll nicht laden da weder die Adresse der dll noch die der Methode in dll könnte gefunden werden. Ich habe aus der MSDN gelesen, dass es noch eine die LoadLibraryEx() gibt, die die dll laden kann. Aber diese braucht mindestens drei parameter. Deswegen war ich dabei alles zu probieren. jetzt habe ich den Code so geändert So nächstes Wenn ich den Aufruf //pFn(input64); auskommentiere, dann kann ich die Adresse der Dll und der aufzurufenden Methode lesen. Das kann ich mit dem Dependency Walker nach Korrektheit der Adressen prüfen. Mit dem Aufruf von pFn(input64); sehe ich nicht in der Konsole und dann wird dieser Fehler Report generiert Werte von input64 Auf der Java Seite erzeuge ich einen Array der so aussieht Letzte frage Ich versuche hier die Implemntierung der Methode aus C mit zu kopieren. Ich hoffe es wird nicht zu viel Arbeit für dich zum Anschauen sein. ich habe ansonsten keine richtige Dokumentation dazu. Hier die Implementierung . ich habe heute aus MSDN gelesen, dass diese LoadLibrary erfordert ein paar Sachen wie: Linker Coredll.lib, ich habe auf meinem System gesucht und könnte keine Coredll.lib finen, kann es sein, dass es daran liegt? Wenn ja wie Schaffe ich das? Google könnte mir nicht helfen. Danke für die weiter Ideen. Zonbléou
  5. Hallo, könnte mein Programm bis jetzt immer noch nicht zum laufen bringen. Wenn ich die NewByteArray/SetByteArrayRegion Methoden einbaue dann kriege ich die fehlermeldung, ich bin nicht in Benutzung von Structure oder Union. So sieht mein Programm endlich aus: HINSTANCE hIns; pFunc pFn; hIns = LoadLibraryEx("C:\\Dokumente und Einstellungen\\SBX825\\Desktop\\Rohdata\\DetSys_001", NULL, DONT_RESOLVE_DLL_REFERENCES); printf("AddressDll %d\n", hIns); printf("LoadLibrary: %d\n", GetLastError()); if(hIns) pFn = (pFunc)GetProcAddress(hIns, "_mcbe_RechneMitZeile"); printf("AddressFunc %d\n", pFn); printf("LoadLibrary: %d\n", GetLastError()); printf("%d\n", pFn(input64)); FreeLibrary(hIns); Ich lasse das laufen und ich kriege diese Fehlermeldung: # # An unexpected error has been detected by Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0adc18f5, pid=4076, tid=3440 # # Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode) # Problematic frame: # C [DetSys_001.dll+0x18f5] # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # Vielleicht kann mir jemand dabei helfen. Zonbléou
  6. Hi, wie baut sich diese Funktion auf? oder wie macht man das? Kannst Du mir ein Bsp. geben? Danke
  7. Hallo, ich habe jetzt keine Ideen mehr. Das stimmt das was Du sagst wegen vergenes Problem, aber wie kann ich effizient das Problem lösen? Hast Du vielleicht eine Idee oder eine Funktion die ich benutzen kann? Kannst Du mir die geben? Die Funktion bekommt einen Array von Werten rechnet und gibt das Ergebnis zurück. Brauche ich noch eine zusätliche Implementierung in meiner Datei? Danke
  8. Hi, So mit LoadLibrary() werden die Dll die Abhängigkeiten zu den anderen Dll haben nicht geladen. Die nächste Möglichkeit ist diese Methode LoadLibraryEx() die drei Parameter erwartet. Damit habe ich zu mindestens die Adresse der Dll und die Methode ausgeben können. input64 ist ein Parameter der Methode _mcbe_RechneMitZeile(). Jetzt habe ich die Implementierung wie folgt versucht input64 bekommt Array Werte auf Java Seite. Ich kann hier leider keine Ausgabe in der Consol mit printf auf pFn(input64) machen, weil die Methode _mcbe_RechneMitZeile hat ein void als Rückgabe Typ. Die Ausführen gibt keine Fehlermeldung und zeig auch nichts. Wie kann ich jetzt testen, dass mein Aufruf wirklich funktioniert? Danke. Z.
  9. Hallo, ich habe eine Frage die sich auf java, jni/jna, c/c++ bezieht. Kann mir jemand diese Frage antworten? Ich habe es soweit bis fast der letzte Punkt wo ich blockiert bin. Ich will die C-DLL Methoden in java aufrufen. Soweit habe ich das ganze gebaut bis die dlls geladen. Jetzt versuche ich die Methoden aufzurufen und ich kriege Fehlermeldung wie folgt Hier ist meine Implementierung: Vielen Dank im voraus. Zonbléou
  10. Hi, es waren die . Da es in dem zur Verfügung gestellten Ordner nicht gibt, habe ich gedacht es sollte was mit Windows Funktionalitäten zu tun haben. Danke noch Mal. Z.
  11. Guten morgen, danke erst, ich wollte die Antwort von gestern Abend probieren. Die dll von java die ich ausprobiert habe liegt in dem selben Ordner wie meine d_cal12.dll trotzdem kann mein programm die finden und die Adresse ausgeben. Aber meine d_cal12 wird nicht gefunden. Wegen Dependency Walker Abhängigkeiten, ich habe die fehlende Dll haute aus Internet heruntergeladen, leider meine MPR.DLL ist nicht vollständig und der Dependency Walker weist diesen Fehler auf:Warning: . Mein printf("%d", GetLastError()); gibt 126 aus. Danke. Z.
  12. Hi, der Aufruf von gibt als Fehler, das der Pfad oder Verzeichnis nicht gefunden wird. Jetzt habe ich irgendeine npjava11.ddl aus java jre genommen und genauso in meinem eclipse eingebaut wie die anderen c-dll. Dann habe ich eine Methode aus dieser npjava11.dll mit Dependency-walker gelesen und die Adressen von der Dll und die Methode abgefragt. Ich könnte die beiden Adressen lesen. ich weiss jetzt nicht was mit den anderen c-dll los ist? Danke. Z.
  13. Hallo, ich denke etwas stimmt nicht bei meinen Dlls, Ich habe es jetzt so geändert Bei printf("%d" , hIns) bekomme ich ein 0 und bei printf("%d" , pFn) bekomme ich eine Zahl: 112223216 egal, ob ich die andere Methode nehme. Wenn ich irgendeine Dll aus jre nehme dann bekomme ich eine Zahl != 0. Alle meine C-dll geben ein 0 zurück. ich kann das jetzt nicht interpretieren. Naja vielleicht gibt irgendwann eine Lösung oder auch nicht. Danke. Z.
  14. Hi, ich habe es so geändert: und ich bekomme ein 0 zurück. Soll das heißen, dass die Methode nicht gefunden wurde? Z.
  15. Hallo, ich habe noch eine kleine Frage. Meine implementierung gefällt mir nicht ganz aber ich weiss auch wie man das richtig macht. So habe ich das gemacht. Mein printf() um die Adresse der Methode auszugeben, weiss nicht, ob richtig? Sagen Sie mir was falls eine richtige Lösung gibt. Danke. Z.
  16. Guten morgen mein Retter, ich denke das habe ich endlich hingekriegt. Obwohl es noch Warnungen gibt wie: "unused variable 'input64' beim Aufruf von pFunc(input64) und "int format, pointer arg(arg2)" beim Aufruf von printf("%d\n", input64)", der Output in der Consol gibt mir irgendeine Zahl: "179013040" was die Adresse der Methode sein kann. Jetzt versuche ich meinen auf der Seite von Java aufzufüllen und sehen, ob die Berechnung klappt. Vielen Danke noch für Deine Gedult. Zonbléou.
  17. Hallo, keiner kommt mir heute zur hilfe? Die gleiche Frage von gestern. Wegen NULL ausgabe oder die Adresse der Methode, sollte ich irgendeinen Aufruf einbauen damit die Ausgabe in der Consol angezeigt wird? Zum Bsp: irgend ein "printf()"? Danke. Z.
  18. Hi, es ist keine Fehlermeldung an sich, eclipse eine Warning und wenn man mit dem Mauszeiger darauf geht dann liest man, dass der parameter nicht benutzt wird. Wegen NULL ausgabe oder die Adresse der Methode, sollte ich irgendeinen Aufruf einbauen damit die Ausgabe in der Consol angezeigt wird? Zum Bsp: irgend ein "printf()"? Danke.
  19. Guten morgen, ich habe noch eine Frage und die letzte wahrscheinlich. Beim Aufrufen von methoden in meiner Wrapper, geht's um die die Methoden im Header oder die im C-DLL. Es gibt einen kleinen Unterschied zwischen beiden. Die im C-DLL sind mit einem "_" vorangestellt und die im Header nicht. Kann man eigentlich prüfen, ob die Methoden gefunden sind oder nicht? In meiner Implementierung gibt eine Warnung, dass der Parameter im aufzurufende Mthode nicht benutzt ist, z.B: pFunc(input64), dass input64 nicht benutzt ist. Vielen Dank für die letzte Rettungsaktion. Z.
  20. Hi, Danke für die Ergänzung. gibt es eine Möglichkeit zu prüfen, ob meine Methoden aufgerufen sind oder nicht? Danke
  21. Ich bin auch ganz neu zu C und weiss deswegen nicht wie ich das richtig programmieren kann. Wegen Der Funktionszeigertyp pFunc; wie mache ich das? So heisst die Funktion im Header: Wenn ich der Aufruf von "mcbe_RechneMitZeile(char* input64)" versuche dann kriege eine Fehlermeldung, daß die Structure ist nicht enthalten. Naja sicher funktioniert das irgendwie!!
  22. Mein letzter Einbinden von kernel32.dll und libkernel32.a scheint funktioniert zu haben. Außerdem musste ich noch "windows.h" inkludieren. Meine LoadLibrary/GetProcAddress habe ich wie folgt implementiert: typedef void (*FNPTR)(char*); typedef jbyte (*pFunc) (jbyte input64) HINSTANCE hIns; pFunc pFn; jbyte input64[] = {2,4}; hIns = LoadLibrary("d_cal12.DLL"); if(hIns) { pFn = (pFunc)GetProcAddress(hIns,"_mcbe_RechneMitZeile") ; FreeLibrary(hIns); } system("PAUSE"); Es gibt keine Reference Beschwerden mehr. Meine .a, .def Dateien wurden erzeugt. Im .def-Datei kann man alle exports Funktionen von meinem JNI-DLL und Import C-DLL und deren Funktionen sehen. Meine Frage; es bedingt noch Aufrufe von C-DLL Methoden im meinem Wrapper-Datei? Wie sehe ich die endgültige Ergebnisse oder ob der Aufruf funktioniert hat? Vielleicht die letzte Störung. Danke für Deine Gedult. Ich gebe noch die Implementierung einer Methode mit und zeigen Sie mir das was fehlt. JNIEXPORT void JNICALL Java_triangleberechner_Triangulationsberechnung__1 mcbe_1RechneMitZeile (JNIEnv *env, jobject obj, jbyteArray jarr) { HINSTANCE hIns; pFunc pFn; jbyte input64[] = {2,4}; hIns = LoadLibrary("d_cal12.DLL"); if(hIns) { pFn = (pFunc)GetProcAddress(hIns,"_mcbe_RechneMitZeile") ; FreeLibrary(hIns); } system("PAUSE"); // Speicher freigeben und rückkopieren des Arrays (*env)->ReleaseByteArrayElements(env, jarr, input64, 0); }
  23. Hallo Herren, wie Sie merken, Sie sind der einzige der mir bei dem Thema helfen können. Mein letzter Einbinden von kernel32.dll und libkernel32.a scheint funktioniert zu haben. Außerdem musste ich noch "windows.h" inkludieren. Meine LoadLibrary/GetProcAddress habe ich wie folgt implementiert: Es gibt keine Reference Beschwerden mehr. Meine .a, .def Dateien wurden erzeugt. Im .def-Datei kann man alle exports Funktionen von meinem JNI-DLL und Import C-DLL und deren Funktionen sehen. Meine Frage; es bedingt noch Aufrufe von C-DLL Methoden im meinem Wrapper-Datei? Wie sehe ich die endgültige Ergebnisse oder ob der Aufruf funktioniert hat? Vielleicht die letzte Störung. Danke für Deine Gedult. Ich gebe noch die Implementierung einer Methode mit und zeigen Sie mir das was fehlt.
  24. Hallo noch einmal, ich störe jetzt schon zu viel aber entschuldigen Sie. Ich habe nach dem Beispiel von jemandem aus Internet es so gemacht: projects->properties->C/C++Build->Settings->Tool Settings->MinGW C++ Linker-->Miscellaneous->Other Objects und neuen adden mit dem link "C:\MinGW\lib\libkernel32.a" . und dan unter lib Im -> Settings->Directory den Namen von kernel32.dll eingefügt. Können Sie mir bei der Deklaration von LoadLibrary() und GetProcAdress() helfen indem Sie mir ein Bsp. geben? Die Bsp. aus Internet sind mit irgend INSTANCE Variablen gebaut und ich komme nicht klar damit. Vielen Dank im voraus. Z.
  25. Hallo, was mache ich jetzt falsch? Ich bin erschöpft. Sollte ich irgendwas in dieser Methode als Rumpf implementieren? Falls ja, können Sie mir ein Bsp. geben? Jesdes Mal, wenn ich versuche "LoadLabrary()" aufzurufen oder eine Methode aus der C-DLL zum Bsp. "_mcbe_RechneMitZeile(parameter)" aufzurufen, ich kriege immer dieser undefined reference to '_LoadLibrary' Fehlermeldung. Ohne irgendeinen Aufruf compilier Fehlerfrei. Ich weiss nicht was ich machen soll. Bitte um Bsp. Z.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...