hallo Leute,
folgendes Problem: Ich schreibe im moment wider mal eine UDF, in welcher ich eine Dll verwende. Ich habe sie bisher allein in einem Skript getestet und da hat es einwandfrei funktioniert. Jetzt habe ich sie in eines meiner größeren Projekte eingebunden, ganz normal include, und wollte dort die start-funktion ausführen. Die dll öffnete sich nicht korrekt. in der Variablen stand der Wert 8. Dann habe ich die dateien in den selben Ordner wie die .au3 kopiert. Bei der dll ist eine ini-datei dabei, ich dachte, vielleicht ist dort der fehler. dann habe ich pfade usw. umgeändert und wider probiert. rückgabewert: 5. ich weiß nicht mehr weiter :). die dll geht einfach nicht, nur wenn ich die UDF allein in einem Skript verwende.
Hier der Link zu der UDF:
http://dl.dropbox.com/u/2500371/eci.zip
alle Dateien, die dort drin sind, müssen in den selben Ordner gelegt werden. ansonsten muss man die .ini umschreiben.
zum start die _eci_startup() ausführen. da kommt bei mir als Ergebnis in der $_EloDll schon der Rückgabewert 5 raus.
Ich freue mich schon auf eure Antworten.
mfg.
Timtam
merkwürdiger DllOpen Rückgabewert, aber warum?
-
- [ offen ]
-
Timtam -
8. Oktober 2011 um 17:12 -
Geschlossen -
Erledigt
-
-
Hallo,
Variablendeklaration in deinem Skript

Lg Kleiner
-
ok, ich habe wohl vergessen zu erwähnen... der include der eci.au3 ist der letzte meiner includes und direkt (kein befehl mehr dazwischen) kommt der _eci_startup().also...
Kleiner: da ist nichts mehr dazwischen, was die variablen falsch deklarieren könnte. -
Was soll da falsch sein? DLLOpen liefert ein DLL-handle. Wenn das >= 0 ist, ist alles in Ordnung damit.
-
naja... seiddem der Rückgabewert nicht mehr 1 ist, funktioniert die Funktion _eci_new() nicht mehr. sie gibt 0 zurück.also habe ich angenommen, dass das an dem nicht mehr selben dllopen Rückgabewert liegt.
-
Deine Fehlerprüfung ist auch falsch:
If $_EloDll <> 1 ThenLass das doch einfach weg und mach direkt den DLLCall. Wenn $_EloDll flasch gesetzt ist, gibt DLLCall schon den passenden @error-Wert zurück. Das musst du nicht selber machen.
[autoit]
PS: Du kannst also alle Funktionen so kürzen:Func _Eci_New()
[/autoit]
Local $aDll_Return = DllCall($_EloDll, "int", "eciNew")
If @error Then Return SetError(@error, 0, -1)
Return $aDll_Return[0]
EndFunc ;==>_Eci_New -
gut. Danke @progandy. nur auf den selben Nenner komme ich trotzdem, denn dann gibt die Funktion als @error 1 zurück, was so viel heißt wie, die Dll-Datei kann nicht verwendet werden, also Fehler beim öffnen. Damit bin ich nicht wirklich weiter...