Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 09:13

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Import & Script-Splittung

Discussion on Import & Script-Splittung within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: May 2008
Posts: 167
Received Thanks: 41
Import & Script-Splittung

Hallo,

ich hänge seit längerem an einem Problem und hoffe,
dass ihr mir weiterhelfen könnt dieses zu lösen

Im speziellen geht es dabei um die ImageSearch UDF.

Bislang bestanden meine Scripts nur aus
  • main.au3 (Hauptscript)
  • imagesearch.au3 + imagesearchdll.dll
  • settings.ini
  • Bilder-Ordner (hier sind die benötigten Bilder für imagesearch)
Da das Script mittlerweile mehrere 1000 Zeilen lang ist,
möchte ich es gern der Übersicht halber,
sowie um die Funktionsdateien auch in anderen Scripten
nutzen zu können in mehrere Dateien verpacken,
etwa so:

Code:
/bot/ (@ScriptDir)
   /Bilder/*
   /Funktionen/
      /ImageSearch.au3
      /ImageSearchDLL.dll
      /image.au3 (eigene Image-Funktionen, die auf der imagesearch aufbauen)
   /settings
      /settings.ini
   /main.au3
Hier nun ein Beispielinhalt für die image.au3
Code:
#include "ImageSearch.au3"
Func _test()
   Local $x, $y
   If _ImageSearchArea("../bilder/map.JPG", 1, 3330, 490, 3630, 590, $x, $y, 100) = 1 Then
      MsgBox(0, "", "Test erfolgreich")
   Else
      MsgBox(0, "", "Test fehlgeschlagen")
   EndIf
EndFunc
_test()
Führe ich jetzt die image.au3 direkt aus, wird das Bild gefunden und es erscheint die MsgBox mit Test erfolgreich.
Kommentiere ich nun den Funktionsaufruf _test() aus, ändere den Bilfpfad in "bilder/map.JPG" und starte die main.au3

main.au3
Code:
#include "Funktionen\image.au3"
_test()
bekomme ich die MsgBox Test fehlgeschlagen.

Der Fehler liegt scheinbar beim Import der ImageSearch.au3 oder der .dll,
den Bildpfad habe ich bereits mit FileExists überprüft.
Die ImageSearch.au3 habe ich auch bereits testweise aus dem Ordner entfernt und stattdessen in AutoIT3\Includes kopiert,
genauso habe ich die dll aus dem Verzeichnis nach %windir%\system32\ verschoben.

Ich hoffe ihr habt ne Idee, was ich falsch mache bzw ändern / ausprobieren könnte.


MfG
nofuture
nofuture is offline  
Old 08/15/2014, 03:33   #2


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Wenn du etwas includest, ist das Script in deinem Script als hättest du es selbst geschrieben.
Heißt der Pfad ist nicht mehr "/ImageSearch.au3" sondern "/Funktionen/ImageSearch.au3"

Aber um Doppelincludes zu vermeiden, würde ich alle Includes in die Hauptklasse schreiben.
Requi is offline  
Thanks
1 User
Old 08/15/2014, 03:52   #3
 
c0w's Avatar
 
elite*gold: 3653
The Black Market: 378/0/0
Join Date: Aug 2008
Posts: 30,854
Received Thanks: 529
bin ja echt kein geordneter coder, aber dieses funktionen in verschiedene scripte schieben und dann includen hab ich echt nie verstanden, wenn ich mir ne func für was schreib kommt das ins mainscript in ne func region.
das is doch irgendwie typish c++ programmierer oder 10 code teile, 12 dlls
c0w is offline  
Old 08/15/2014, 04:50   #4


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Quote:
Originally Posted by c0w View Post
bin ja echt kein geordneter coder, aber dieses funktionen in verschiedene scripte schieben und dann includen hab ich echt nie verstanden, wenn ich mir ne func für was schreib kommt das ins mainscript in ne func region.
das is doch irgendwie typish c++ programmierer oder 10 code teile, 12 dlls
Das ist typisch Programmierer. Wenn man schon programmiert, dann auch geordnet. Bei AutoIt habe ich jetzt auch nie darauf geachtet, aber für C# etc. schon. Aber selbst bei AutoIt kann das von Vorteil sein, da du es wie ein include nutzen kannst für spätere Projekte.
Requi is offline  
Old 08/15/2014, 11:03   #5
 
elite*gold: 0
Join Date: May 2008
Posts: 167
Received Thanks: 41
Danke für den Denkanstoß Requi.

Auch wenn es mich jetzt etwas wundert - aber der Includeverweis der ImageSearch.au3 stimmt.
Ich denke, wäre das der Fehler gewesen, hätte mich das Problem auch nicht so lange beschäftigt, da der Funktionsaufruf _ImageSearchArea(...) einen unknown function-fehler hervorrufen dürfte und nicht einfach nur FALSE bzw. 0 zurückgeben.

Das Problem war wohl vielmehr die Architektur (x86 / x64) und der Aufruf der DLL-Datei,
Abhilfe hat es geschafft die ImageSearchDLL.dll in den Hauptordner zu verschieben, alternativ kann auch der Aufruf der DLLCall-Funktion in Zeile 47 der ImageSearch.au3 in meinem Fall auf Funktionen/ImageSearchDLL.dll geändert werden.

bezüglich der doppel-includes stimme ich dir in gewisser Weise zu,
in diesem Fall jedoch soll die image.au3 jedoch die ImageSearch.au3 "ablösen",
sprich alle Bildvergleichsfunktionen, die die ImageSearch.au3 benutzen, sollen hier noch ein Grundgerüst bekommen, um den Funktionsaufruf zu erleichtern.

Hier mal ein Beispiel für eine der Funktionen:
Code:
Func _checkImage($img, $iniDescription, $tolerance, $click = 0, $speed = 10)
   ; $imgpath wird als "bilder" deklariert, $img soll der reine Bildname ohne Endung sein
   $img_complete = $imgpath & "/" & $img & ".JPG"
   ; _getKoordDB liefert top,right,bottom,left als Array zurück - die Daten werden innerhalb der Funktion aus der .ini gezogen.
   $koordArray = _getKoordDB($iniDescription)
   $result = _ImageSearchArea($img_complete, 1, $koordArray[3], $koordArray[0], $koordArray[1], $koordArray[2], $x, $y, $tolerance)
   ; bei Bedarf Mausklicks und Success- oder Fail-Returnwerte
   If $result = 1 Then
	  If $click = 1 Then
		 MouseClick("left", $x, $y, 1, $speed)
	  ElseIf $click = 2 Then
		 MouseClick("left", $x, $y, 2, $speed)
	  EndIf
	  Return 1
   Else
	  Return 0
   EndIf
EndFunc

@c0w
ich muss dich leider enttäuschen - auch wenn ich mich schon länger mal mit C beschäftigen wollte, habe ich bis heute noch keine einzige Zeile code in C geschrieben

Bezüglich der Includes ist es natürlich geschmachsabhängig, ob man gerne alles in einer Datei hat oder den Code "sinnvoll" auf verschiedene Dateien splittet (wobei der Sinn natürlich immer im Auge des Betrachters liegt),
ich denke es kann auf verschiedene Arten Sinn machen:

1) Allgemeine Funktionen wie die ImageSearch-UDF oder auch meine image.au3 (auch wenn diese in anderen Projekten ggf. wegen der Ordnerstruktur ggf. nicht 1:1 übernommen werden kann) - hier spart man sich einfach einiges an Arbeit bei weiteren Projekten, bei denen ähnliche Dinge benötigt werden.
2) Aufteilen verschiedener Code-Segmente, sodass an mehreren Stellen "gleichzeitig" gearbeitet werden kann, ohne ständig im Code hoch- und runterscrollen zu müssen.
3) Übersichtlicher Code, sodass leicht nachvollziehbar ist, was wann und wo gestartet wird.
nofuture is offline  
Old 08/15/2014, 20:50   #6
 
c0w's Avatar
 
elite*gold: 3653
The Black Market: 378/0/0
Join Date: Aug 2008
Posts: 30,854
Received Thanks: 529
Naja bei mir ists oft der falls, dass ich noch eine Funktion erweiter änder oder kombiniere, wenn ich jetzt 5 includes hab muss ich zick Dateien durchsuchen, so nur mein Main Script. Daher hab ich gern Alles in einer Datei strg f und ich bin sofort an der richtigen func
c0w is offline  
Old 08/15/2014, 21:27   #7
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by Requi View Post
Aber um Doppelincludes zu vermeiden, würde ich alle Includes in die Hauptklasse schreiben.
#include-once
YatoDev is offline  
Old 08/16/2014, 00:12   #8
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
Quote:
Originally Posted by c0w View Post
Naja bei mir ists oft der falls, dass ich noch eine Funktion erweiter änder oder kombiniere, wenn ich jetzt 5 includes hab muss ich zick Dateien durchsuchen, so nur mein Main Script. Daher hab ich gern Alles in einer Datei strg f und ich bin sofort an der richtigen func
strg+j springt sogar direkt zur func, bei der der cursor gerade ist
butter123 is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Dll Import
01/28/2014 - CO2 Programming - 11 Replies
well i've been studying C# till Now but i couldnt understand this part ... Why would i need to use External Dll Files ? and How do i know that im using the Right Dll ? i've Seen many Example of ppls using User32.Dll Or Kernel.Dll .. what are these Dlls Provide ? and i've seen Alot Or Parameters being used when these Dlls are used in the Project ..so i need Help in This Regards shadowman123
import chrmgr
10/03/2010 - Metin2 Private Server - 2 Replies
Hi, ich würde gerne wissen wo ich dieses "chrmgr" finden kann er nimmt es ja irgentwo heer Es steht in den .py datein aus den root.eix/epk Gruß.
import?
09/29/2009 - General Coding - 8 Replies
Hi, in dem Quellcode einer datei aus einem entpackten Spielclienten habe ich folgendes drinstehen (die punkkte sollen nur heisen das davor und danach noch was kommt) ... import snd import chat import textTail import snd import net
Import
05/25/2006 - Off Topic - 4 Replies
Moin Also, Im internet werden öfters solche importhändler listen wie zb bei www.importer-scout.de angeboten Jetzt würde ich mich dafür interresieren ob jemand schonmal dafür bezahlt hat und ob es sich lohnt etc Oder villeicht wer einige importhändlerlisten aus china etc kennt wo man möglichst billig produkte zum weiterverkauf herbekommt Würd mich über eure meinungen freun auch über PM



All times are GMT +1. The time now is 09:14.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.