dllcall

  • Hallo

    warum arbeitet dieser CODE

    [autoit]


    DllCall("InpOut32.dll","short","Out32","short",0x378,"short",$port,"short",0)

    [/autoit]

    nur in AUTOIT V3.1

    und nicht in AutoIT V3.2XXX

    und wie krieg ich den da zum laufen ??

    geht um das ansprechen des LPT PORT

    hier ne fertige au3 ( einfach mit AutoIT V3.1 in eine EXE compilieren

    funktioniert wunderbar

    ps.: inpout23.dll googlen und in windows system32 kopieren.

    Spoiler anzeigen
    [autoit]


    ;LPT1_von_pc_ausgeben
    ;funktioniert nur, wenn skript mit Auto It V3.1 in exe konvertiert wird.
    ;ansonsten schwerer Ausnahmefehler

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $pfad = @WorkingDir&"\"

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists( $pfad&"LPT1_von_PC_ausgeben.ini") Then
    iniexists()
    Else
    MsgBox (4,"LPT1_von_PC_ausgeben","kann "& $pfad&"LPT1_von_PC_ausgeben.ini"&" nicht finden -- wird erstellt")
    iniWrite( $pfad&"LPT1_von_PC_ausgeben.ini", "LPT1_0x378_out", "port", "255 ;hier den anzusteuernden Port eintragen")
    iniWrite( $pfad&"LPT1_von_PC_ausgeben.ini", "LPT1_0x378_out", "schleife", "1 ; 1 für Ja -- 0 für NEIN")

    [/autoit] [autoit][/autoit] [autoit]

    exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit]

    ;-------------

    [/autoit] [autoit][/autoit] [autoit]

    Func iniexists()

    $schleife = IniRead( $pfad&"LPT1_von_PC_ausgeben.ini", "LPT1_0x378_out", "schleife", "1")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $schleife = 1 Then
    schleife()
    ElseIf $schleife = 0 Then
    nur_ein_mal()
    Else
    MsgBox(4,"LPT1_von_PC_ausgeben","Bitte in " & $pfad&"LPT1_von_PC_ausgeben.ini "&" schleife eintragen")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func nur_ein_mal()

    [/autoit] [autoit][/autoit] [autoit]

    $port = IniRead($pfad&"LPT1_von_PC_ausgeben.ini", "LPT1_0x378_out", "port", "0")

    [/autoit] [autoit][/autoit] [autoit]

    DllCall("InpOut32.dll","short","Out32","short",0x378,"short",$port,"short",0)

    [/autoit] [autoit][/autoit] [autoit]

    EXIT

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;----------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func schleife()
    While 1

    [/autoit] [autoit][/autoit] [autoit]

    $port = IniRead($pfad&"LPT1_von_PC_ausgeben.ini", "LPT1_0x378_out", "port", "0")

    [/autoit] [autoit][/autoit] [autoit]

    DllCall("InpOut32.dll","short","Out32","short",0x378,"short",$port,"short",0)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    WEnd
    EndFunc
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    PPS.:

    hier das ganze noch in grün, um ein LPT Signal in den Pc einzulesen

    gilt das gleiche wie oben.( geht auch nur mit AUto IT V 3.1)

    Spoiler anzeigen
    [autoit]


    ;LPT_in_pc_einlesen
    Global $address,$port,$zustand,$pfad,$ini,$wini,$schleife,$tooltip, $sleep

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If not Fileexists("c:\LPT1_in_pc_einlesen_pfad.ini") then
    iniWrite( "c:\LPT1_in_pc_einlesen_pfad.ini", "LPT1_0x379_in_pc_einlesen", "pfad", @WorkingDir & "\")
    ;MsgBox(1,"LPT1_in_pc_einlesen","FEHLER -- Die INI mit dem Filename - c:\LPT1_in_pc_einlesen_pfad.ini - Der section - [LPT1_0x379_in_pc_einlesen] - und dem KEY - pfad = workdir - fehlt --- BITTE erstellen")
    MsgBox(4,"LPT1_in_pc_einlesen","bitte legen sie die workdirektory fest -- in C:\c:\LPT1_in_pc_einlesen_pfad.ini")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;$pfad1 = @WorkingDir&"\"

    [/autoit] [autoit][/autoit] [autoit]

    $pfad = IniRead( "c:\LPT1_in_pc_einlesen_pfad.ini", "LPT1_0x379_in_pc_einlesen", "pfad", "")

    [/autoit] [autoit][/autoit] [autoit]

    ;$pfad = $pfad1"\"

    [/autoit] [autoit][/autoit] [autoit]

    $ini = $pfad&"LPT1_in_pc_einlesen.ini"
    $wini = $pfad&"LPT1_in_pc_einlesen_work.ini"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If FileExists( $ini ) then
    iniexists()
    Else
    MsgBox (4,"LPT1_in_pc_einlesen","kann "& $ini & " nicht finden -- wird erstellt")
    iniWrite( $ini, "LPT1_0x379_in_pc_einlesen", "port", "2 ; hier den anzusteuernden Port eintragen")
    iniWrite( $ini, "LPT1_0x379_in_pc_einlesen", "zustand", "1 ; 1 für Ja -- 0 für NEIN")
    iniWrite( $ini, "LPT1_0x379_in_pc_einlesen", "schleife", "1 ; 1 für Ja -- 0 für NEIN")
    iniWrite( $ini, "LPT1_0x379_in_pc_einlesen", "ToolTip", "1 ; 1 für Ja -- 0 für NEIN")
    iniWrite( $ini, "LPT1_0x379_in_pc_einlesen", "sleep", "10 ; 10 ms")
    ;iniWrite( $ini, "LPT1_0x379_in_pc_einlesen", "pfad", $pfad1)
    exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;---------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func iniexists()

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists( $wini ) then
    alliniexists()
    Else
    MsgBox (4,"LPT1_von_pc_ausgeben","kann "& $wini & " nicht finden -- wird erstellt")
    iniWrite( $wini, "LPT1_0x379_in_pc_einlesen_work", "CODE", "0 ; hier wird der aktuelle wert des portes eingefügt ")
    exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc
    ;----------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func alliniexists()

    [/autoit] [autoit][/autoit] [autoit]

    $address = 0x379
    $port = IniRead( $ini, "LPT1_0x379_in_pc_einlesen", "port", "2")
    $zustand = IniRead( $ini, "LPT1_0x379_in_pc_einlesen", "zustand", "1")
    $schleife= IniRead( $ini, "LPT1_0x379_in_pc_einlesen", "schleife", "1")
    $tooltip = IniRead( $ini, "LPT1_0x379_in_pc_einlesen", "ToolTip", "0")
    $sleep = IniRead( $ini, "LPT1_0x379_in_pc_einlesen", "sleep", "10")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    IF $schleife = 0 Then
    keineschleife()
    ElseIf $schleife = 1 Then
    schleife()
    else
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;-----------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func schleife()

    [/autoit] [autoit][/autoit] [autoit]

    while 1

    [/autoit] [autoit][/autoit] [autoit]

    $schleife= IniRead( $ini, "LPT1_0x379_in_pc_einlesen", "schleife", "1")
    IF $schleife = 0 Then
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    sleep($sleep)

    [/autoit] [autoit][/autoit] [autoit]

    $result = DllCall("inpout32.dll", "short", "Inp32", "short", $address,"short",$port,"short",$zustand)

    [/autoit] [autoit][/autoit] [autoit]

    IniWrite( $wini, "LPT1_0x379_in_pc_einlesen_work", "CODE", $result[0])

    [/autoit] [autoit][/autoit] [autoit]

    IF $tooltip = 1 Then
    ToolTip($result[0],0,0)
    EndIf
    WEnd
    EndFunc
    exit

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------

    [/autoit] [autoit][/autoit] [autoit]

    Func keineschleife()
    $result = DllCall("inpout32.dll", "short", "Inp32", "short", $address,"short",$port,"short",$zustand)
    IniWrite( $wini, "LPT1_0x379_in_pc_einlesen_work", "CODE", $result[0])
    IF $tooltip = 1 Then
    ToolTip($result[0],0,0)
    Else
    EndIf
    EndFunc

    [/autoit]

    PPPS.:

    Wäre über eine HILFE sehr dankbar.

    da ich jetzt alles über die ini-files schieben muss...

    braucht Rechenleistung ohne ENDE.

  • @virus.

    Kannst Du bitte folgendes beachten?

    Du hast bis jetzt 4 Beiträge und alle drehen sich um das gleiche Thema. Bitte nicht jedes mal ein neues Thema aufmachen, wenn das Problem eigentlich das gleiche ist (hier die DLL).

    Und dann noch der Tip: Man kann Beiträge doch editieren. Nicht jedes mal einen neuen Beitrag, denn sonst ließt das irgendwann keiner mehr.

    Gruss, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ich denke das hat damit zu tun (aus der AutoIt History für 3.2):

    • Changed: DllCall() new method of passing types by reference using *.
    • Changed: DllCall(): short_ptr, long_ptr, int_ptr types deprecated. Use short*, long* and int* respectively.

    Daher wird es wohl einfach behoben sein indem du "short" mit "*" ersetzt :)

    Edit: Hab wohl schneller geschrieben als ich gedacht habe xD das hab ich falsch interpretiert... Sry für den unnötigen Post.

    Einmal editiert, zuletzt von emsis (12. Dezember 2007 um 03:40)

  • Hallo zusammen...

    @ emsis

    nee geht nicht mit * ... ?(

    die AutoIt History hab ich mir auch schon angeschaut ...bin aber nicht wirklich schlauer draus geworden. Sind zu viele Änderungen... Läuft irgend wie aus dem Ruder.. :!:


    @ alina

    zu Zitat : 4 Beiträge und alle drehen sich um das gleiche Thema.

    Es sind nur 2 Beiträge :!: ... und 2 Skript Vorstellungen :D , falls das auch jemand anders gebrauchen kann...

    Und ich habe beim ersten Beitrag nur geantwortet ;) .... Ihn also nicht selber erstellt!!!!! :P


    UND

    Ich finde das ein extrem wichtiges Thema, da sich ja zu Version 3.1 irgend was verschlechtert hat. !!!

    Ich will bloß nicht, dass das unter geht.


    @ xenobiologist

    danke...

    aber...

    Die hatte ich schon alle durch.. 8o

    alles alte Beiträge

    welche sich mit dem Thema an sich beschäftigen.. allerdings nicht mit der Lösung der V3.2.XX Versionen.


    @ ALL

    bitte nicht aufhören zu schreiben!!
    Die Lösung muss her !!!! wenn jemand Schaltpläne zum testen braucht..
    Melden !!

    ULTRA THX

    • Offizieller Beitrag

    Hallo,

    nimm mal statt short ushort, ansonsten wäre die DLL und die Doku zur DLL recht hilfreich, hab aber keine Lust wenn ich schon helfen soll, auch noch selbst nach der DLL zu suchen, einfach eine ZIP erstellen und anhängen!

  • DANKE !!

    ich habs !!!

    war die formatierung !!!!

    von pc ausgeben

    Spoiler anzeigen
    [autoit]

    $war = InputBox("sdfb","kanal")

    [/autoit] [autoit][/autoit] [autoit]

    $result = DllCall("InpOut32.dll","int","Out32","int","0x378","int",$war)

    [/autoit]

    in pc einlesen

    Spoiler anzeigen
    [autoit]

    while 1
    sleep(100)
    $wert = DllCall("inpout32.dll", "short", "Inp32", "short", "0x379")

    [/autoit] [autoit][/autoit] [autoit]

    ToolTip($wert[0],0,0)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit]

    THX

    PS.: wie kann ich ne zip datei anhängen ?!

    infos unter :
    http://logix4u.net/Legacy_Ports/P…nterfacing.html

    Einmal editiert, zuletzt von vivus (12. Dezember 2007 um 15:26)

    • Offizieller Beitrag

    Hallo,

    anhängen von Dateien geht folgendermaßen:

    SROALoginHP1.8.zip

    1. Auf Dateianhänge wechseln
    2. Datei auswählen
    3. Datei hochladen