Laden...

Forenbeiträge von hm_hm Ingesamt 6 Beiträge

26.10.2006 - 21:03 Uhr

Hallo DaSchröter,

der Typ ist string[].

wenn ich aber versuche auf string[] zu casten


string[] AllOPCServers;
object node=null;
AllOPCServers=(string[])AnOPCServer.GetOPCServers(node);

bekomme ich wieder eine cast-exeption:
Unable to cast object of type 'System.String*' to type 'System.String[]'.

Ich versteh nicht, warum ich überhaupt casten muss, wenn AllOPCServers als Object deklariert wird, klappt doch der Methodenaufruf fehlerfrei, ich seh im Debugger die korrekten Einträge, ich kann nur nicht per Index darauf zugreifen! ?

ODaniel

23.10.2006 - 23:17 Uhr

Hallo,
die Methode GetOPCServers liefert alle auf dem Rechner vorhanden OPC-Server zurück.
In VB schrieb man:
Dim AllOPCServers As Variant
Dim i As Integer
AllOPCServers = AnOPCServer.GetOPCServers()
For i = LBound(AllOPCServers) To UBound(AllOPCServers)
ListServer.AddItem AllOPCServers(i)
Next i

Fügt man die COM-Komponente als INTEROP in C# ein, liefert GetOPCServer als Rückgabewert laut Objektbrowser ein Object:

Schreibe ich:


OPCServer AnOPCServer=new OPCServer();
object AllOPCServers;
object node=null;
AllOPCServers=AnOPCServer.GetOPCServers(node);

wird AllOPCServers als Array mit zwei Objekten angelegt, die Indexe sind im Debugger als Hex-Werte zu sehen, die Werte sind korrekt. Sobald ich aber per Index auf die Elemente von AllOPCServers zugreifen will, bekomme ich "Cannot apply Indexing to an expression type object".
Declariere ich object[] AllOPCServers bekomme ich "Implizite Umwandlung von Object nach Object[] geht nicht"
Wie komme ich an die Arrayelemente heran?

Danke......

Daniel

12.10.2006 - 19:29 Uhr

Hi LastGentleman,

myDeviceMngr wird woanders instanziert, ich hatte den Methodenaufruf nur zum beseren Verständinss für meine Frage einkopiert.

ich habs jetzt , die Objektzuweisung muss heisen:

myIODATA=(IODATA)myDevice;

weil das myDevice-Object von der AccessDevice-Methode der DeviceMngr-Klasse zurückgegeben wird, und diese nicht das IIODATA-Interface implemtiert.

Sorry, das ist alles blöd zu erklären weil das COM-Interop voller Interfaces mit abgeleiteten Interfaces ist und so weiter.

Danke für Eure Hilfe

Daniel

11.10.2006 - 20:55 Uhr

Ich möchte doch nur wissen, ob es in c# ein Äquivalent zur VB-Anweisung:

SET myIODATA=myDevice

gibt???

Danke

25.05.2006 - 13:26 Uhr

Hallo herbivore,

..., wenn im XML-File 4,9 steht gehts, ich hatte im falschen XML-File nacheditiert!
Danke! Wenn ich Dich schon mal dranhabe, wie handelt man denn externe Files in einem VS2005-Projekt?
Ich hab das XML manuell in den bin-Ordner kopiert, und mit LOAD(@"ccd.xml") geladen, was zum testen geht, aber sicher nicht der richtige weg ist.
XML-File und z.B. Bilder für Pic-Boxen unter Projekt/Ressorcen und dann wie weiter?
Sorry bin Anfänger!

Danke Daniel

25.05.2006 - 12:22 Uhr

Hallo,

ich lese mit :


 xmldoc.Load(@"ccd.xml");
            // Erzeugen eines XmlElements
            XmlElement obRoot = xmldoc.DocumentElement;
            foreach(XmlNode obXMLNode in obRoot.ChildNodes)
            { 
                double owidth  = Convert.ToDouble(obXMLNode.SelectSingleNode("width").InnerText);


folgende XML-Elemente ein:

<CCD>
<width>4.9</width>
<height>3.7</height>
<text>1/3" (4.9 x 3.7mm)</text>
</CCD>

Problem: in owidth steht 49.0 statt 4.9?? Auch wenn ich in XML Datei 4,9 schreibe!

Danke für Eure Hilfe!

Daniel