öffnen dll
-
Hi Leute!
Kann mir einer sagen warum ich den Folgenden fehler bekomme wenn ich mein Programm aus führe um eine dll auszulesen.
Fehler:
"Die Anweisung in "0x00000000" verweist au Speier in "0x00000000". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden."Der fehler wird aber erst ausgegeben sobald ich beginne die dll auszulesen.
Hier noch mein code mit dem ich die DLL auslesen will:
ReadPosition readposition; float ptr_pderrs1[5]; float ptr_cderrs1[5]; int ptr_ncolours; dll_handle = LoadLibrary( "dlltest.dll" ); readposition = (ReadPosition)GetProcAddress(dll_handle, "ReadPosition"); m_readposition = 1; m_ptr_ncolours=1; ptr_ncolours = m_ptr_ncolours; m_ptr_pderrs=m_ptr_cderrs=1; ptr_pderrs1[1]= ptr_cderrs1[1] = m_ptr_cderrs; m_readposition = readposition(&ptr_ncolours,ptr_pderrs1,ptr_cderrs1); m_ptr_ncolours=ptr_ncolours; m_ptr_pderrs=ptr_pderrs1[z]; m_ptr_cderrs=ptr_cderrs1[z]; if(z==4) { z=0; } else { z++; } UpdateData(FALSE);z ist eine Glodale variable und nicht weiter wichtig
-
readposition wird wohl NULL haben. Prüfe den Rückgabewert von GetProcAddress
-
Du meinst ich soll die dll überprüfen dass der Fehler in der DLL erzeugt wird?
Hier mal der code aus der dll:
extern "C" _declspec(dllexport) int _stdcall ReadPosition( int *ptr_ncolours, float *ptr_pderrs, float *ptr_cderrs) { int i=0; float test[5]; float test2[5]; test[0]=gelbpd; test[1]=schwarzpd; test[2]=rotpd; test2[0]=gelbcd; test2[1]=schwarzcd; test2[2]=rotcd; *ptr_ncolours=3; for(i=0;i<=4;i++) { *ptr_pderrs=test[i]; ptr_pderrs++; *ptr_cderrs=test2[i]; ptr_cderrs++; } return 2; }; dlltest.def : Deklariert die Modul-Parameter für die DLL. LIBRARY "dlltest" DESCRIPTION 'dlltest Windows Dynamic Link Library' EXPORTS ; Explizite Exporte können hier eingefügt werden ReadPosition
-
Na die Fehlerbeschreibung Deinerseits lässt nur Raten zu.
Entweder ist das dll_handle null oder readposition .
Und das wirst Du ja noch mit einem if abprüfen können ?
-
der dll_handle ist null kann dir das weiterhelfen? Ich muss die werte die in den arrays test und test2 stehen in die exe bekommen. Was habe ich falsch gemacht?
-
der dll_handle ist null kann dir das weiterhelfen? Ich muss die werte die in den arrays test und test2 stehen in die exe bekommen. Was habe ich falsch gemacht?
-
LoadLibrary kann Deine dll nicht finden.
Du musst dafür sorgen das diese im Pfad liegt.
z.B. %windir%\system32
oder da wo die .exe ausgeführt wird
z.B.
..\DeinProgramm\Debug\
Geh mal auf LoadLibrary und drück F1. Da findeste Details.
-
LoadLibrary kann Deine dll nicht finden.
Du musst dafür sorgen das diese im Pfad liegt.
z.B. %windir%\system32
oder da wo die .exe ausgeführt wird
z.B.
..\DeinProgramm\Debug\
Geh mal auf LoadLibrary und drück F1. Da findeste Details.
-
Ich habe die dll in den Debug ordner Projekts gelegt und in die Ordner system und system32 und bei mir ist immernoch der dll_handel ==0
-
Kann mir einer sagen was es noch sein kann ich bin ratlos.
Der Compiler und auch der linker der dll sowie der exe geben keine Fehler aus nur eben beim ausführen bekomme ich immernoch den oben genanten fehler.
-
HMODULE hModule = LoadLibrary("dlltest.dll");
Mach mal das und schau ob er immer noch null ist
-
Tut mir Leid Tom aber es funktioniert auch nicht.
Ich hatte vor einigen Monaten mal ne test-dll geschrieben mit 2 Funktionen und hatte meinen jetzigen code nur ersetz und die eine Funktion gelöscht zumindest in der dll und in der exe habe ich auch nur die Teiele gelöscht die ich klar zur anderen funktion zuteilen konnte. ansonsten habe ich es auch wie ganz oben im code die dll geöffnen oder zumindest im Programm benutzt um daten zu bekommen.
-
Ich vermut jetzt eher der Fehler liegt in der DLL, wenn ich die alte dll die ja 2 Funktionen hat mit der jetzigen exe öffnen kann ich die eine Funktion immernoch auslesen.
-
Du hast meine Frage nicht beantwortet. "Funktioniert nicht" ist keine Antwort.
-
Der Handel ist immernoch null. Ich habe auch nochmal die .def Datei der dll kontrolliert und meine da ist kein fehler drin
-
Wenn der HANDLE NULL ist findet er die DLL nicht oder die DLL ist falsch
-
Ich habe als Betriebssystem Win 2k und die dll liegt in C:/Winnt/system von da müste er doch die dll finden oder? Hier noch der Code der übergabefunktion aus der dll:
extern "C" _declspec(dllexport) int _stdcall ReadPosition( int *ptr_ncolours, float *ptr_pderrs, float *ptr_cderrs) { int i=0; float test[5]; float test2[5]; test[0]=gelbpd; test[1]=schwarzpd; test[2]=rotpd; test2[0]=gelbcd; test2[1]=schwarzcd; test2[2]=rotcd; *ptr_ncolours=3; for(i=0;i<=4;i++) { *ptr_pderrs=test[i]; ptr_pderrs++; *ptr_cderrs=test2[i]; ptr_cderrs++; } return 2; }
-
in system32 liegen die dll`s.
Oder du hast sie im Localordner
-
Was die DLL beinhaltet ist an dem Punkt völlig schnuppe. Erst wenn der dll Handle != NULL ist spielt das ne rolle. Und vom immer wieder das gleiche schreiben wirds nich Informativer ;o)
-
http://www.sensorme.de/dateien/Plugintest.zip
Lade dir das mal runter und suche dir die DLÖL aus. Das Programm gibt dann aus ob sie geladen werden konnte oder nicht