Zonbléou Geschrieben 1. April 2009 Autor Teilen Geschrieben 1. April 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 1. April 2009 Teilen Geschrieben 1. April 2009 Kann man eigentlich prüfen, ob die Methoden gefunden sind oder nicht?Wenn die Funktion in der DLL nicht gefunden wird, gibt GetProcAddress NULL zurück. In meiner Implementierung gibt eine Warnung, dass der Parameter im aufzurufende Mthode nicht benutzt ist, z.B: pFunc(input64), dass input64 nicht benutzt ist.Wie lautet die genaue Fehlermeldung, und wie sieht der Code dazu aus? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 1. April 2009 Autor Teilen Geschrieben 1. April 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 2. April 2009 Autor Teilen Geschrieben 2. April 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. April 2009 Teilen Geschrieben 2. April 2009 Hallo, keiner kommt mir heute zur hilfe?Anstatt dieselbe Frage zu wiederholen (siehe dazu auch die Boardregeln bezüglich "Threadpushing"), könntest du dich fragen, warum niemand antwortet. 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()"?Im Ernst, was soll diese Frage? "Ich habe hier eine Funktion, die fehlschlagen kann. In diesem Fall kann mein Programm an dieser Stelle nicht weiterlaufen. Sollte ich diesen Fall abfangen und irgendwie behandeln?" Selbstverständlich solltest du das. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 6. April 2009 Autor Teilen Geschrieben 6. April 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 7. April 2009 Autor Teilen Geschrieben 7. April 2009 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? HINSTANCE hIns; pFunc pFn; hIns = LoadLibrary("d_cal12.DLL"); pFn = (pFunc)GetProcAddress(hIns,"_mcbe_RechneMitZeile"); pFunc(input64); FreeLibrary(hIns); printf("Address %d\n", input64); Sagen Sie mir was falls eine richtige Lösung gibt. Danke. Z. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. April 2009 Teilen Geschrieben 7. April 2009 Die Adresse der Funktion steht in pFn, nicht in input64. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 7. April 2009 Autor Teilen Geschrieben 7. April 2009 Hi, ich habe es so geändert: printf("%d\n", pFn); und ich bekomme ein 0 zurück. Soll das heißen, dass die Methode nicht gefunden wurde? Z. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. April 2009 Teilen Geschrieben 7. April 2009 ich habe es so geändert: und ich bekomme ein 0 zurück. Soll das heißen, dass die Methode nicht gefunden wurde?Kann sein. Kann aber auch sein, dass dein input64-Array zu klein ist und die Funktion dir den Stack überschreibt. Mach die Ausgabe bitte mal zwischen den Aufruf von GetProcAddress und dem Aufruf der Funktion selbst. Wenn da immer noch 0 herauskommt, wurde die Funktion nicht gefunden. Lass dir zur Sicherheit auch noch den Wert von hIns nach dem LoadLibrary-Aufruf ausgeben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 7. April 2009 Autor Teilen Geschrieben 7. April 2009 Hallo, ich denke etwas stimmt nicht bei meinen Dlls, Ich habe es jetzt so geändert hIns = LoadLibrary("C:\\Dokumente und Einstellungen\\SBX825\\Desktop\\Rohdata\\d_cal12.dll"); printf("Address %d\n", hIns); if(hIns) pFn = (pFunc)GetProcAddress(hIns, "_mcbe_RechneMitZeile"); printf("Address %d\n", pFn); pFunc(input64); FreeLibrary(hIns); 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. April 2009 Teilen Geschrieben 7. April 2009 Bei printf("%d" , hIns) bekomme ich ein 0Dann ist LoadLibrary fehlgeschlagen. ich kann das jetzt nicht interpretieren.Die Dokumentation von LoadLibrary hilft: LoadLibrary Function (Windows) If the function fails, the return value is NULL. To get extended error information, call GetLastError. Bau also das nach der Ausgabe von hIns ein: printf("LoadLibrary LastError: %d\n", GetLastError()); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 7. April 2009 Autor Teilen Geschrieben 7. April 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. April 2009 Teilen Geschrieben 7. April 2009 Kopier die Datei bitte mal an eine Stelle im Dateisystem, die keine Leerzeichen enthält, und versuch es damit nochmal. Sind laut Dependency Walker alle Abhängigkeiten von d_cal12.dll erfüllt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 8. April 2009 Autor Teilen Geschrieben 8. April 2009 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: "At least one module has an unresolved import due to a missing export function in a delay-load dependent module. Mein printf("%d", GetLastError()); gibt 126 aus. Danke. Z. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. April 2009 Teilen Geschrieben 8. April 2009 Wegen Dependency Walker Abhängigkeiten, ich habe die fehlende Dll haute aus Internet heruntergeladen,Langsam, welche DLL fehlte denn? Du solltest nicht einfach so irgendwelche DLLs aus dem Internet herunterladen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zonbléou Geschrieben 8. April 2009 Autor Teilen Geschrieben 8. April 2009 Hi, es waren die msjava.dll und mpr.dll. 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.