IOW24 und C#

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
dark80
Posts: 2
Joined: Wed Sep 26, 2007 11:00 am

IOW24 und C#

Post by dark80 »

Hallo zusammen,

Ich versuche seit 2 Tagen die I/O`s von meinem IOW24 zu steuern.
Leider konnte ich bis jetzt nichts erreicht...*grrr*
Ich versuche das ganze in C# zu lösen und verwende VS2005. Habe es auch schon mit der IOW.NET.dll versucht... habe aber auch nur auf Granit gebissen.


Hier kommt mein code.

Code: Select all

    public struct IOW24REPORT
    {        
        public ushort reportID;
        public char[] bytes;
    }

Code: Select all

public bool connectWarrior()
        {
            if (ioHandle != 0)
                return false;

            ioHandle = IOWLib.IowKitOpenDevice();
            if (ioHandle != 0)
            {
                sProduktID = IOWLib.IowKitGetProductId(this.ioHandle);
                txbProduktID.Text = sProduktID.ToString("x");
                if (this.sProduktID.ToString("x") == "1501")
                    txbProduktID.Text = "1501 (IO Warrior 24)";
                else if( this.sProduktID.ToString("x") == "1500")
                    txbProduktID.Text = "1500 (IO Warrior 40)";
                else
                    txbProduktID.Text = "not supported!";
                txbSerial.Text = SerialNumber;                                                
                return true;                
            }
            return false;
        }

Code: Select all

private void buttonSetStatus_Click(object sender, EventArgs e)
        {
            int numPipe = 0;
            int st = 0;
            iow24report = new IOW24REPORT();
            iow24report.bytes = new char[2];            

            iow24report.reportID = 0;
            iow24report.bytes[0] = (char)Convert.ToInt16(txbValue.Text);

            st = IOWLib.IowKitWrite(this.ioHandle, numPipe, ref iow24report.bytes[0], sizeof(iow24report));
            textBox1.Text = st.ToString();
        }
Ich glaube dass mein Problem darin besteht, dass ich bei der Methode IowKitWrite() und zwar bei dem 3 Parameter es nicht hinbekommen kann, diesen in "(char) ref iow24report" zu casten.
Bin mir hierbei aber auch nicht mehr sicher.

Beste Dank im voraus für eure Hilfe.
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Genau was geht denn schief?
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

Hallo dark80,

schwer zu sagen was hier nicht funktioniert, das wir nicht wissen wie die Funktionen in der Klasse IOWLib definiert sind.

Auf jeden Fall gibt es fast immer Probleme wenn man irgendwo die sizeof()-funktion auf eine C# Datenstruktur anwendet, und dies als einen Parameter für einen native-call mittels PInvoke verwendet.

Code: Select all

st = IOWLib.IowKitWrite(this.ioHandle, numPipe, ref iow24report.bytes[0], sizeof(iow24report)); 
falls hier sizeof() nicht 3 ergibt, steigt die IowkIt-Lib schon aus.
Mit der definition von IOW24REPORT liegt man schon bei 1xushort+2xchar daneben.

Schick die Daten doch erst mal als einfaches ref byte[] array.

Falls Du nicht unbedingt auf die IowKit-Library als Basis angewiesen bist:
Ich habe eine alternative Library in C# geschrieben :
http://www.wayoda.org/csiow/index.html

Eberhard
dark80
Posts: 2
Joined: Wed Sep 26, 2007 11:00 am

Post by dark80 »

Als erstes Danke für die schnellen Antworten!!!
Erst seit heute hab ich wieder inet.

Ich bin mir nicht ganz sicher wie das byte[] array aussehen muss.
Was an welcher pos. stehen muss.
byte[0] = ?
byte[1] = ?
...

Deswegen funktioniert es wohl nicht ganz so wie es soll. Bis jetzt kann ich die I/O`s nur auf 0 setzen.

wayoda:
Ich schaue mit jetzt deine lösung an... Thx.

Gruß
Post Reply