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
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
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
Ich möchte doch nur wissen, ob es in c# ein Äquivalent zur VB-Anweisung:
SET myIODATA=myDevice
gibt???
Danke
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
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